支持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结构的字符串。