在网络通信中,数据经常被做成json格式的来进行传输。那么我们怎么在linux系统中去做json格式的数据呢?怎么将接收到的json格式的数据解析出来呢?
1、linux json库的安装
(1)下载json-c源码包
(2)解压json-c的源码包
Tar -xvf json-c-0.10.tar.gz
(3)配置成X86平台json包
./configure --prefix=/usr
(4)编译
Make
(5)安装
Sudo make install
2、json库中常用的函数接口
----------------生成json格式的数据常用函数接口-----------------
(1)创建一个空的json对象
Struct json_object *obj = json_object_new_object();
(2)以key-value的形式添加json对象的成员
Value值是int类型:key值是“temp”,value值是20
json_object_object_add(obj,temp”,json_object_new_int(20));
Value值是string类型:key值是“name”,value值是”mm”
json_object_object_add(obj,name”,json_object_new_string(“mm”));
(3)将json对象内容,转成json格式的字符串
Unsigned char *json_string = json_object_to_json_string(obj);
--------------解析json格式的数据常用函数接口------------------
(1)将json格式的字符串转成json对象
Struct json_object new_obj = json_tokener_parse(json_string);
(2)根据指定对象的成员名,获取这个成员对象的json对象
Struct json_object *object = json_object_object_get(new_object);
(3)根据key值取得相应的value值
Value值为int:
Json_object_get_int(object);
Value值为string:
Json_object_get_string(object);
3、对于比较简单的json格式的数据,我们用到上面的函数接口就可以完成json格式数据的制作和解析。
4、假如碰到比较复杂的json数组格式的数据,我们又该怎么去制作和解析呢?
示例说明:{
"jporder":
[
{ "jdevice": 1, "jppaynum": 1 },
{ "jdevice": 2, "jppaynum": 2 }
]
}
分析该数据的组成:
1、key值为”jporder”,与其相对应的value值是一个数组[ { "jdevice": 1, "jppaynum": 1 }, { "jdevice": 2, "jppaynum": 2 } ]
2、数组的每个成员都是两对json对象
数组成员1:{ "jdevice": 1, "jppaynum": 1 }
数组成员2:{ "jdevice": 2, "jppaynum": 2 }
3、每个json对象都是由key_value组成
具体的数据生成和解析方法如下:
数据生成部分:
数据解析部分:
运行结果如下: