您的位置:首页 > 编程语言 > C语言/C++

在C语言中解析JSON配置文件

2016-03-27 10:22 921 查看
我使用的是cJSON:http://sourceforge.net/projects/cjson/ 
http://www.linuxidc.com/Linux/2014-05/101822.htm
先看json的数据结构 
c中没有对象,所以json数据是采用链表存储的 

C代码  



typedef struct cJSON {  

    struct cJSON *next,*prev;   // 数组 对象数据中用到  

    struct cJSON *child;        // 数组 和对象中指向子数组对象或值  

  

    int type;           // 元素的类型,如是对象还是数组  

  

    char *valuestring;          // 如果是字符串  

    int valueint;               // 如果是数值  

    double valuedouble;         // 如果类型是cJSON_Number  

  

    char *string;               // The item's name string, if this item is the child of, or is in the list of subitems of an object.  

} cJSON;  

比如你有一个json数据 

Javascript代码  



{  

    "name": "Jack (\"Bee\") Nimble",   

    "format": {  

        "type":       "rect",   

        "width":      1920,   

        "height":     1080,   

        "interlace":  false,   

        "frame rate": 24  

    }  

}  

那么你可以 
1:讲字符串解析成json结构体。 

C代码  



cJSON *root = cJSON_Parse(my_json_string);  

2:获取某个元素 

C代码  



cJSON *format = cJSON_GetObjectItem(root,"format");  

int framerate = cJSON_GetObjectItem(format,"frame rate")->valueint;  

3:讲json结构体转换成字符串 

C代码  



char *rendered=cJSON_Print(root);  

4:删除 

C代码  



cJSON_Delete(root);  

5:构建一个json结构体 

C代码  



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,"frame rate",   24);  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: