c语言libjson库一些api和内存管理

转载 2016年07月26日 20:34:36
1. json_object_get与json_object_put函数 struct json_object* json_object_get(struct json_object *jso); // 将jso对象的引用计数加1,返回jso自身
void json_object_put(struct json_object *jso); // 将jso对象的引用计数减1。此时如果jso的引用计数大于0,直接返回; 如果jso的引用计数为0,则递归的对每个子对象的引用计数减1,子对象引用计数为0时释放所占用内存。
注:如果对json对象显式调用了json_object_get,之后必须成对调用json_object_put,否则将导致该json对象所占用内存泄漏。
2. json_object_new_XXX系列函数 struct json_object* json_object_new_object(void);
struct json_object* json_object_new_int(int i);
struct json_object* json_object_new_double(double d);
struct json_object* json_object_new_array(void);
struct json_object* json_object_new_string(const char *s);
struct json_object* json_object_new_string_len(const char *s, int len);
json_object_new_XXX系列函数用来创建XXX类型的json对象,创建的json对象默认引用计数为1,因此在该对象使用完后也需要调用一次json_object_put来把引用计数置0,从而释放内存。
3. json_tokener_parse函数 struct json_object* json_tokener_parse(const char *str);
json_tokener_parse将符合json格式的字符串构造为一个json对象,构造的json对象默认引用计数为1,同样需要在使用完后对该对象调用一次json_object_put。
4. is_error宏
is_error(jso)
如果传入的字符串是非法的json格式,错误判断应该使用is_error宏,而非 if(NULL != jso),CGI中目前有很多这种错误用法(虽然好像没引发什么问题)
5. json_object_object_XXX函数
void json_object_object_del(struct json_object* jso, const char *key);
从jso对象中删除键值为key的子对象,并释放该子对象及键值所占的内存(注:可能有文档说json_object_object_del只是删除而不释放内存,但实际上这是错误的)。
struct json_object* json_object_object_get(struct json_object* jso, const char *key); 从jso中获取键值为key的子对象。错误判断同样应该用is_error(jso)宏。
void json_object_object_add(struct json_object* jso, const char *key, struct json_object *val); 更新键值为key的子项的值。整个过程实际上是这样的:先从jso中删除并释放键值key及其值的内存,然后重新分配内存添加键值和新的值,所以json_object_object_add是包含json_object_object_del操作的。
6. json_object_get_XXX系列函数 struct lh_table* json_object_get_object(struct json_object *jso);
const char* json_object_get_string(struct json_object *jso);
int json_object_get_int(struct json_object *jso);
double json_object_get_double(struct json_object *jso); 这类函数只是获取jso对象的实际数据内容,不更新引用计数,也不分配内存。
7. json_object_array_XXX系列函数
struct json_object* json_object_array_get_sub_array(struct json_object *jso, int start_idx, int number);
这个函数用来从一个json数组对象中取数组序号start_idx开始的、总共number长度的子数组对象。分页显示功能常用到。注:返回的子数组是有重新分配内存的,所以同样要对返回的json_object*做一次json_object_put操作来释放内存。
int json_object_array_add(struct json_object *jso,struct json_object *val); 向数组中添加一个值。
int json_object_array_length(struct json_object *jso); 获取数组长度。
int json_object_array_put_idx(struct json_object *jso, int idx, struct json_object *val); 更新数组中序号为idx那一项的值,老的值同样会先被释放。
struct json_object* json_object_array_get_idx(struct json_object *jso, int idx); 获取数组中序号为idx那一项的json对象,不更新引用计数,也不分配内存。
struct json_object* json_object_array_sort(struct json_object *jso, const char *keyname, int sord ); 根据键值为keyname的项的值进行升序或降序排序,只是改变数组成员的顺序,不更新引用计数,也不分配内存。

libjson 是一个完全兼容 JSON 规范的 json 格式数据的 C 语言解析包。

  • 2010年06月17日 10:57
  • 105KB
  • 下载

用libjson-glib处理json数据

json是一个轻量级的数据交换格式,在我们的一些大型程序时,可以用它来存储一些数据信息。前一篇演示了nodejs解析json的过程,今天我们要用我们传统的c语言来处理。 要用c语言来处理我们就需要依赖...
  • tlight
  • tlight
  • 2015-09-06 14:58:34
  • 1184

libjson-rpc-cpp windows使用探索

libjson-rpc-cpp This framework provides cross platform JSON-RPC (remote procedure call) support fo...
  • thanklife
  • thanklife
  • 2017-02-24 20:07:15
  • 940

libjson的使用

首先下载这个软件,此次是libjson_7.5.0.zip。 1.makefile或手动的编译生成了两个lib文件libjsonDebug.lib和libjsonRelease.lib,放在当前目录下...
  • yockie
  • yockie
  • 2015-01-30 15:11:17
  • 5818

libjson 编译和使用 - 1. 编译

最近想用box2dEdit来编辑一下比较复杂的图形然后倒入到自己有游戏里,但box2dEdit编辑后输出的是json文件。 因为没有用C++解析json文件的经验,在网上找了很多有关json的开源项...
  • laogong5i0
  • laogong5i0
  • 2012-11-22 17:37:48
  • 7477

JSON-lib框架介绍

原文地址:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html JSON-lib框架,转换JSON、XML不再困难 Json-...
  • tanga842428
  • tanga842428
  • 2017-02-04 17:57:07
  • 2902

关于libjson的个人使用体会

libjson是c/c++的一个json库,可以用于解析和产生json格式的字符串。由于个人需要,这几天学着用了一下,自己的感觉就是——相当麻烦。很可能是自己水平不够,在这里总结一下自己的使用心得吧。...
  • dusiliang
  • dusiliang
  • 2012-06-20 23:27:22
  • 2648

libjson使用详解(linux和windows)

我长话短说: http://download.csdn.net/detail/rongxiaojun/6859823 从官网下的最新的libjson 在centOS 6.4下使用各种错误,“u...
  • rongxiaojun
  • rongxiaojun
  • 2014-01-17 20:35:04
  • 4505

linux添加库后出现 error while loading shared libraries: libjson.so

在linux下运行程序时,发现了error while loading shared libraries这种错误,一时间不知道解决办法,在网上搜索,终于解决了:   ./tests: er...
  • xl19900502
  • xl19900502
  • 2016-07-18 19:00:30
  • 1689

JSON格式解析和libjson使用简介

转自: Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML。本文主要介绍JSON格式的简单概念及JSON在Rss Reader中的应用。 ...
  • G1036583997
  • G1036583997
  • 2014-11-11 10:38:59
  • 8586
收藏助手
不良信息举报
您举报文章:c语言libjson库一些api和内存管理
举报原因:
原因补充:

(最多只允许输入30个字)