概述
/ # cat /proc/meminfo
MemTotal:
61632 kB
MemFree:
38796 kB
Buffers:
0 kB
Cached:
17104 kB
SwapCached:
0 kB
Active:
2152 kB
Inactive:
15476 kB
Active(anon):
524 kB
Inactive(anon):
0 kB
Active(file):
1628 kB
Inactive(file):
15476 kB
Unevictable:
0 kB
Mlocked:
0 kB
SwapTotal:
0 kB
SwapFree:
0 kB
Dirty:
0 kB
Writeback:
0 kB
AnonPages:
548 kB
Mapped:
1184 kB
Slab:
4156 kB
SReclaimable:
820 kB
SUnreclaim:
3336 kB
PageTables:
100 kB
NFS_Unstable:
0 kB
Bounce:
0 kB
WritebackTmp:
0 kB
CommitLimit:
30816 kB
Committed_AS:
2476 kB
VmallocTotal:
956416 kB
VmallocUsed:
263600 kB
VmallocChunk:
686076 kB
/ #
struct json_object* json_object_new_int(int32_t i)
{
struct json_object *jso = json_object_new(json_type_int);
if (!jso)
return NULL;
jso->_to_json_string = &json_object_int_to_json_string;
jso->o.c_int64 = i;
return jso;
}
static struct json_object* json_object_new(enum json_type o_type)
{
struct json_object *jso;
jso = (struct json_object*)calloc(sizeof(struct json_object), 1);
if (!jso)
return NULL;
jso->o_type = o_type;
jso->_ref_count = 1;
jso->_delete = &json_object_generic_delete;
#ifdef REFCOUNT_DEBUG
lh_table_insert(json_object_table, jso, jso);
MC_DEBUG("json_object_new_%s: %pn", json_type_to_name(jso->o_type), jso);
#endif /* REFCOUNT_DEBUG */
return jso;
}
int json_object_object_add(struct json_object* jso, const char *key,
struct json_object *val)
{
return json_object_object_add_ex(jso, key, val, 0);
}
int json_object_object_add_ex(struct json_object* jso,
const char *const key,
struct json_object *const val,
const unsigned opts)
{
struct json_object *existing_value = NULL;
struct lh_entry *existing_entry;
unsigned long hash;
assert(json_object_get_type(jso) == json_type_object);
// We lookup the entry and replace the value, rather than just deleting
// and re-adding it, so the existing key remains valid.
hash = lh_get_hash(jso->o.c_object, (const void *)key);
existing_entry = (opts & JSON_C_OBJECT_ADD_KEY_IS_NEW) ? NULL :
lh_table_lookup_entry_w_hash(jso->o.c_object,
(const void *)key, hash);
// The caller must avoid creating loops in the object tree, but do a
// quick check anyway to make sure we're not creating a trivial loop.
if (jso == val)
return -1;
if (!existing_entry)
{
const void *const k = (opts & JSON_C_OBJECT_KEY_IS_CONSTANT) ?
(const void *)key : strdup(key);
if (k == NULL)
return -1;
return lh_table_insert_w_hash(jso->o.c_object, k, val, hash, opts);
}
existing_value = (json_object *) lh_entry_v(existing_entry);
if (existing_value)
json_object_put(existing_value);
existing_entry->v = val;
return 0;
}
const char* json_object_get_string(struct json_object *jso)
{
if (!jso)
return NULL;
switch(jso->o_type)
{
case json_type_string:
return get_string_component(jso);
default:
return json_object_to_json_string(jso);
}
}
/* helper for accessing the optimized string data component in json_object
*/
static const char *
get_string_component(const struct json_object *jso)
{
return (jso->o.c_string.len < LEN_DIRECT_STRING_DATA) ?
jso->o.c_string.str.data : jso->o.c_string.str.ptr;
}
/* backwards-compatible conversion to string */
const char* json_object_to_json_string(struct json_object *jso)
{
return json_object_to_json_string_ext(jso, JSON_C_TO_STRING_SPACED);
}
const char* json_object_to_json_string_ext(struct json_object *jso, int flags)
{
return json_object_to_json_string_length(jso, flags, NULL);
}
/* extended conversion to string */
const char* json_object_to_json_string_length(struct json_object *jso, int flags, size_t *length)
{
const char *r = NULL;
size_t s = 0;
if (!jso)
{
s = 4;
r = "null";
}
else if ((jso->_pb) || (jso->_pb = printbuf_new()))
{
printbuf_reset(jso->_pb);
if(jso->_to_json_string(jso, jso->_pb, 0, flags) >= 0)
{
s = (size_t)jso->_pb->bpos;
r = jso->_pb->buf;
}
}
if (length)
*length = s;
return r;
}
最后
以上就是无限老虎为你收集整理的json-c库的使用的全部内容,希望文章能够帮你解决json-c库的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复