cJSON使用记录
cJSON
Ultralightweight JSON parser in ANSI C
项目地址:https://gitcode.com/gh_mirrors/cj/cJSON

·
json解析
cJSON_Parse如果创建失败,内存空间会自动释放,不用关心,当成功创建非NULL的对象,就需要在使用完后手动释放(cJSON_Delete)
cJSON *root = NULL;
do
{
root = cJSON_Parse(msg);
if (root == NULL)
{
pr_err("格式异常\r\n");
break;
}
cJSON *control_str = cJSON_GetObjectItem(root, "control");
if (control_str == NULL)
{
pr_err("control err\r\n");
break;
}
pr_dbg("control>%s\r\n", control_str->valuestring);
} while (0);
if (root)
cJSON_Delete(root);
json编码
使用cJSON_CreateObject函数创建JSON对象,使用完对象后主动释放json对象,cJSON_Delete函数会释放子节点的对象,如下dt和option加入root后,释放root时会自动释放dt和option,重复释放一个json会造成异常。
root = NULL;
cJSON *dt = NULL;
cJSON *option = NULL;
do
{
root = cJSON_CreateObject();
if (root == NULL)
{
pr_err("root null\r\n");
break;
}
cJSON_AddStringToObject(root, "id", "123001");
cJSON_AddStringToObject(root, "control", "status");
dt = cJSON_CreateObject();
if (dt == NULL)
{
pr_err("dt null\r\n");
break;
}
cJSON_AddBoolToObject(dt, "param1", false);
cJSON_AddBoolToObject(dt, "param2", false);
cJSON_AddItemToObject(root, "data", dt);
option = cJSON_CreateObject();
if (option == NULL)
{
pr_err("option null\r\n");
break;
}
cJSON_AddStringToObject(option, "version", version);
cJSON_AddItemToObject(root, "option", option);
string str = cJSON_PrintUnformatted(root);
cJSON_Delete(root);
root = NULL;
if (str == NULL)
{
pr_err("str null\r\n");
break;
}
pr_dbg("%s\r\n",str);
free((void *)str);
} while (0);
if (root)
cJSON_Delete(root);
{ "id":"123001", "control":"status", "data":{ "param1":false, "param2":false }, "option":{ "version":"V1.0" } }




Ultralightweight JSON parser in ANSI C
最近提交(Master分支:8 天前 )
c859b25d
7 天前
74e1ff49
this fixes CVE-2025-57052 11 天前
更多推荐
所有评论(0)