我使用的是cJSON:http://sourceforge.net/projects/cjson/
先看json的数据结构
c中没有对象,所以json数据是采用链表存储的
- typedefstructcJSON{
- structcJSON*next,*prev;//数组对象数据中用到
- structcJSON*child;//数组和对象中指向子数组对象或值
- inttype;//元素的类型,如是对象还是数组
- char*valuestring;//如果是字符串
- intvalueint;//如果是数值
- doublevaluedouble;//如果类型是cJSON_Number
- char*string;//Theitem'snamestring,ifthisitemisthechildof,orisinthelistofsubitemsofanobject.
- }cJSON;
比如你有一个json数据
- {
- "name":"Jack(\"Bee\")Nimble",
- "format":{
- "type":"rect",
- "width":1920,
- "height":1080,
- "interlace":false,
- "framerate":24
- }
- }
那么你可以
1:讲字符串解析成json结构体。
cJSON*root=cJSON_Parse(my_json_string);
2:获取某个元素
- cJSON*format=cJSON_GetObjectItem(root,"format");
- intframerate=cJSON_GetObjectItem(format,"framerate")->valueint;
3:讲json结构体转换成字符串
char*rendered=cJSON_Print(root);
cJSON_Delete(root);
构建一个json结构体
- cJSON*root,*fmt;
- root=cJSON_CreateObject();
- cJSON_AddItemToObject(root,"name",cJSON_CreateString("Jack(\"Bee\")Nimble"));
- cJSON_AddItemToObject(root,"format",fmt=cJSON_CreateObject());
- cJSON_AddStringToObject(fmt,"type","rect");
- cJSON_AddNumberToObject(fmt,"width",1920);
- cJSON_AddNumberToObject(fmt,"height",1080);
- cJSON_AddFalseToObject(fmt,"interlace");
- cJSON_AddNumberToObject(fmt,"framerate",24);