cJSON c语言json库

支持c c++ 的库https://github.com/nlohmann/json
ansic 的json库 https://github.com/DaveGamble/cJSON
文档翻译
https://github.com/faycheng/cJSON

如何使用cJSON呢? 添加cJSON.c到你的项目中,并且把cJSON.h放置到你的项目头文件的搜索路径中。 例如,你可以使用下面命令编译一个使用cJSON的小例子:(tests目录下有相关文件)



gcc cJSON.c test.c -o test -lm
./test



解析JSON的方式:



cJSON *root = cJSON_Parse(my_json_string);
cJSON是一个对象。由于我们使用C语言实现,而C语言中没有对象的概念,所以我们使用结构体模拟对象。



获取framerate节点的值。



cJSON *format = cJSON_GetObjectItem(root,”format”);
int framerate = cJSON_GetObjectItem(format,”frame rate”)->valueint;
改变framerate节点的值。



cJSON_GetObjectItem(format,”frame rate”)->valueint=25;
对节点完成增删改查之后并不意味着完成了一切,每次完成操作后,都需要删除根节点,否则会出现内存泄露。



cJSON_Delete(root);
上述方式就是通过自动模式使用cJSON。当你使用自动模式时,你必须在你要解除对节点的引用前仔细检查指针是否释放。



使用代码生成一个完整的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,”frame rate”, 24);
一般来说,我们都希望使用少量的代码便完成大部分工作。所以,在cJSON中没有复杂的,不必要的配置和使用。



这是cJSON结构体的具体代码:



typedef struct cJSON {
struct cJSON next,prev;
struct cJSON *child;



int type;

char *valuestring;
int valueint;
double valuedouble;

char *string; } cJSON;


当你使用cJSON_Print, 会返回JSON结构的字符串。



Category web