JSON&cJSON

JSON是一种开放的、轻量级的数据交换格式,采用独立于编程语言的文本格式(字

符串)来存储和表示数据,JSON数据以键-值对的形式组织,可以包含对象、数组、字符

串、数字、布尔、NULL这6种基本数据类型。

使用cJSON保函#include "cJSON.h"

其中\为转义字符

使用cJSON对JSON字符进行解析

1.解析JSON

cpp 复制代码
cJSON* js_root = cJSoN_Parse(json_str);

2.获取id键值对里面的值

cpp 复制代码
cJSON * id_js = cJSON_GetObjectItem(js_root,"id");
ESP_LOGI(TAG,"id:%s",cJSON_GetStringValue(id_js));

cJSON * id_js = cJSON_GetObjectItem(js_root,"id")的含义为从js_root中提取键名为"id"的数据,提取后的值为cJSON格式保存在id_js中,

ESP_LOGI(TAG,"id:%s",cJSON_GetStringValue(id_js));为将提取的cJson类型的数值转换为字符串并打印

3.version

cpp 复制代码
cJSoN* version_js = cJsoN_GetobjectItem(js_root,"version");
ESP_LOGI(TAG,"version:%s",cJSoN_GetStringValue(version_js));

4.sys

cpp 复制代码
cJSoN* sys_js = cJSoN_GetobjectItem(js_root,"sys");
cJSON* ack_js = cJSON_GetObjectItem(sys_js,"ack");
ESP_LOGI(TAG,"ack:%s",cJSON_GetStringValue(aCk_js));

5.params

cpp 复制代码
cJSoN* params_js = cJsoN_GetobjectItem(js_root,"params");
cJSoN* power_js = cJSoN_GetObjectItem(params_js,"power");
cJSoN* value_js = cJSoN_GetObjectItem(power_js,"value");
cJSON* time_js = cJsoN_GetobjectItem(power_js,"time");
ESP_LOGI(TAG,"value:%s",cJSON_GetStringValue(value_js));
ESP_LOGI(TAG,"time:%.1lf",cJSON_GetNumberValue(time_js));

6.method

cpp 复制代码
cJSoN* method_js = cJSoN_GetObjectItem(js_root,"method");
ESP_LOGI(TAG,"method:%s",cJSON_GetStringValue(method_js));

7.数组

cpp 复制代码
cJSoN* array_js = cJSoN_GetobjectItem(js_root,"array");
cJSON* sub_js = array_js->child;
int num =0;
while(sub_js)
ESP_LOGI(TAG,"array[%d]:%s",num,cJSON_GetStringValue(sub_js));
sub_js = sub_js->next;
num++;

8.释放CJSON

cpp 复制代码
cJSON_Delete(js_root);

生成JSON字符串

1.生成JSON对象

cpp 复制代码
cJSON * js_root =cJSON_CreatObject();

2.id

cpp 复制代码
cJSON_AddStringToObject(js_root,"id","123");

3.version

cpp 复制代码
cJSON_AddStringToObject(js_root,"version","1.0");

4.sys

cpp 复制代码
cJSON*sys_js= cJSON_CreateObject();
cJSON_AddNumberToObject(sys_js,"ack",1.0);
cJSoN_AddItemToObject(js_root,"sys",sys_js);

5.params

cpp 复制代码
cJSoN *params_js = cJSoN_Createobject();
cJSON *power_js = cJSoN_CreateObject();
cJSoN_AddStringToObject(power_js,"value","on");
cJSoN_AddStringToobject(power_js,"time",1524448722000);
cJSoN_AddItemToObject(params_js,"Power",power_js);
cJSoN_AddItemToObject(js_root,"Params",params_js);

6.array数组

cpp 复制代码
cJSON* array_js = cJSON_CreateArray();
cJSoN_AddItemToArray(array_js,cJSoN_CreateString("string1"));
cJSoN_AddItemToArray(array_js,cJSoN_CreateString("string2"));
cJSoN_AddItemToArray(array_js,cJSoN_CreateString("string3"));
cJSoN_AddItemToObject(js_root,"array",array_js);

7.打印创建的JSON

cpp 复制代码
char* js_str = cJsoN_PrintUnformatted(js_root);
//char* js_str =cJSON_Print(js_root);
ESP_LOGI(TAG,"js:\r(n:%s",js_str);

8.释放内存

cpp 复制代码
cJSON_free(js_str);
cJSON_Delete(js_root);
相关推荐
菜鸟程序员专写BUG8 小时前
SpringBoot 接口返回异常全集|JSON解析失败/响应乱码/状态码错误完美解决
spring boot·后端·json
张涛酱10745610 小时前
Jackson 严格解析:拒绝"温柔"的 JSON
spring boot·json
nilm6111 小时前
作为前端请使用vue2,elementUI框架 根据后端返回的json 生成表格.
前端·elementui·json
wefly20171 天前
免安装!m3u8live.cn在线 M3U8 播放器,小白也能快速上手
java·开发语言·python·json·php·m3u8·m3u8在线转换
-许平安-1 天前
MCP项目笔记七(插件 calculator)
c++·笔记·json·plugin·mcp
ID_180079054731 天前
淘宝商品详情API的调用频率限制是多少?
大数据·数据库·json
wefly20172 天前
jsontop.cn:一站式 JSON 全能工具集,开发全流程效率神器
前端·javascript·python·django·json·json在线转换
电商API&Tina2 天前
比价 / 选品专用:京东 + 淘宝 核心接口实战(可直接复制运行)
大数据·数据库·人工智能·python·json·音视频
进击的雷神2 天前
攻克JSON嵌套HTML的双重解析难题:基于多层数据提取的精准爬虫设计
爬虫·html·json·spiderflow
进击的雷神2 天前
攻克JSON接口分页与对象数组处理:基于AJAX数据源的精准博客爬虫设计
爬虫·ajax·json·spiderflow