c语⾔如何使⽤json,C语⾔:json库的使⽤
Json基础
⼀、Json的概念
Json(Javascript Object Notation)全称为JavaScript对象表⽰法,是⼀种轻量级的数据交换格式,采⽤完全独⽴于语⾔的⽂本格式。JSON 是存储和交换⽂本信息的语法,类似 XML。JSON ⽐ XML 更⼩、更快,更易解析。
1、Json的特性
JSON 是纯⽂本
JSON 具有“⾃我描述性”(⼈类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进⾏解析
JSON 数据可使⽤ AJAX 进⾏传输
2、与XML的对⽐
Json与XML很是相似,关于它们的不同,主要例举以下⼏点:
没有结束标签
更短
读写的速度更快
能够使⽤内建的 JavaScript eval() ⽅法进⾏解析
使⽤数组
不使⽤保留字
⼆、Json的⽤途
⼤致与XML相同
三、Json的语法简要说明
1、Json语法规则
(1)、数据在名称/值对中
(2)、数据由逗号分隔
(3)、花括号保存对象
(4)、⽅括号保存数组
2、JSON 名称/值对与Json值
JSON 数据的书写格式是:名称/值对。
⽰例:"firstName" : "John"
Json的值可以是数字、字符串、布尔值、数组、对象、空值等等。
3、Json对象
Json对象在花括号中书写,⼀个对象可以包含多个名称/值对(即多个数据)。
4、Json数组
JSON 数组在⽅括号中书写:
数组可包含多个对象:
{"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]}
在上⾯的例⼦中,对象 "employees" 是包含三个对象的数组。每个对象代表⼀条关于某⼈(有姓和名)的记录。
四、Json的简易使⽤例⼦
1、使⽤json-c库的函数
1 json_object *my_string;2
3 my_string = json_object_new_string("\t");
4 g_print("my_string = %s\n",json_object_get_string(my_string));5
g_print("_string()=%s\n",json_object_to_json_string(my_string));6 json_object_put(my_string);//减少引⽤计数
7
8 my_string = json_object_new_string("\\");9 g_print("my_string=%s\n", json_object_get_string(my_string));10
g_print("_string()=%s\n", json_object_to_json_string(my_string));11 json_object_put(my_string);12
13 my_string = json_object_new_string("foo");14 g_print("my_string=%s\n", json_object_get_string(my_string));15
g_print("_string()=%s\n",json_object_to_json_string(my_string));
输出结果:
my_string =
_string()="\t"
my_string=\
_string()="\\"
my_string=foo
_string()="foo"
说明:
//Create a new empty json_object of type json_type_xxx
//创建⼀个xxx类型的空json对象,引⽤计数加⼀
extern struct json_object* json_object_new_xxx(xxx s);
/
/减少obj的引⽤计数,当计数为0时就释放掉该对象
int json_object_put(struct json_object *obj);
通过json_object_get_string与json_object_to_json_string的输出结果可以⽐较出前者是提取出字符串值并返回,后者是将字符串以json 格式返回。
这两个函数返回的字符串由json_object管理,即my_string被json_object_put减少引⽤计数⾄0后字符串内存被释放
1 json_object *my_array;
2 my_array =json_object_new_array();
3 //添加json类型值到数组中
4 json_object_array_add(my_array,json_object_new_int(1));
5 json_object_array_add(my_array,json_object_new_int(2));
6 json_object_array_add(my_array,json_object_new_int(3));
7 json_object_array_put_idx(my_array,4,json_object_new_int(5));
8 g_print("my_array=\n");
9 for(i=0;i
输出结果:object to
my_array=
[0]=1
[1]=2
[2]=3
[3]=null
[4]=5
_string() = [ 1, 2, 3, null, 5 ]
说明:
//往值为数组类型的json_object中添加json对象。
extern int json_object_array_add(struct json_object *obj,
struct json_object *val);
//插⼊或替换在数组中idx索引下的元素,引⽤计数不会变化
extern int json_object_array_put_idx(struct json_object *obj, int idx,
struct json_object *val);
//得到类型为数组的json_object的长度
extern int json_object_array_length(struct json_object *obj);
//得到数组中索引为idx的元素
extern struct json_object* json_object_array_get_idx(struct json_object *obj,
int idx);
1 json_object *my_object;
2 my_object =json_object_new_object();
3 //添加json名称和值到json对象集合中
4 json_object_object_add(my_object,"abc",json_object_new_int(12));5
json_object_object_add(my_object,"foo",json_object_new_string("bar"));6
json_object_object_add(my_object,"bool0",json_object_new_boolean(FALSE));7
json_object_object_add(my_object,"bool1",json_object_new_boolean(TRUE));8
json_object_object_add(my_object,"baz",json_object_new_string("bang"));9 //同样的key添加会替换掉
10 json_object_object_add(my_object,"baz",json_object_new_string("fark"));11 json_object_object_del(my_object,"baz");12
13 g_print("my_object=\n");14 //遍历对象集合
15 json_object_object_foreach(my_object,key,val){16 g_print("\t%s : %s\n",key,json_object_to_json_string(val));17 }18
g_print("_string() = %s\n",json_object_to_json_string(my_object));
输出结果:
my_object=
abc : 12
foo : "bar"
bool0 : false
bool1 : true
_string() = { "abc": 12, "foo": "bar", "bool0": false, "bool1": true }说明:
//添加⼀个json对象字段到类型为object的obj中去
extern void json_object_object_add(struct json_object* obj, const char *key, struct json_object *val);
//删除指定的字段,并且被删除的对象的引⽤计数会被减⼀
extern void json_object_object_del(struct json_object* obj, const char *key);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论