cJSON数据的解析和添加,附上完整代码,⽅便⼤家学习。
cJSON库的基本使⽤⽅法
JSON数据格式简答
单个JSON
下⾯先贴上⼀个c语⾔下的json⽂件的样式。下⾯的JSON样式很全,既有了⼦键,⽽且有了数组,对于初学者相对来说⽐较全⾯。这⾥先注意⼀下 最开头的中括号 “[]”,下⾯解析JSON的时候会介绍到。⽤下⾯的代码做测试学习的时候,可以将⾸尾的中括号去掉,理解⼀下。
const char*message =
"[{                              \
\"name\":\"mculover666\",  \
cot的三角函数值表
\"age\": 22,                \
\"weight\": 55.5,          \
\"address\":                \
{                      \
\"country\": \"China\",\
\"zip-code\": 111111\
},                      \
\"skill\": [\"c\", \"Java\", \"Python\"],\
\"student\": false          \
}]        \
";
下⾯是⼀段正常的JSON数据,更易查看。
[{
"name":"mculover666",
"age":22,
"weight":55.5,
"address":
{
"country":"China",
"zip-code":111111
},
"skill":["c","Java","Python"],
"student":false
}];
多个JSON
单个JSON和多个JSON块的不同就是需要⽤ 逗号 将各个JSON隔开,并且每个JSON都需要⽤ {} 隔开。
const char*message =
"[{                              \
\"name\":\"mculover666\",  \
isalpha函数 c++\"age\": 22,                \
\"weight\": 55.5,          \
\"address\":                \
{                      \
\"country\": \"China\",\
\"zip-code\": 111111\
},                      \
\"skill\": [\"c\", \"Java\", \"Python\"],\
\"student\": false          \
},        \
{                          \
\"name\":\"dhn\",  \
\"age\": 23,                \
\"weight\": 72.6,          \
\"address\":                \
{                      \
\"country\": \"China\",\
\"zip-code\": 222222\
},                      \
\"skill\": [\"c\", \"linux\", \"Python\"],\
\"student\": true          \
}]";
下⾯同样贴上正常的JSON样式,便于观看。
[{
"name":"mculover666",
"age":22,
"weight":55.5,
"address":
{
"country":"China",
"zip-code":111111
},
"skill":["c","Java","Python"],
"student":false
},
{
"name":"dhn",
"age":23,
"weight":72.6,
"address":
{
"country":"China",
"zip-code":222222
},
"skill":["c","linux","Python"],
"student":true
}]";
cJSON解析数据及打印显⽰JSON数据解析和打印
#include<stdio.h>
#include<iostream>
using namespace std;
#include"../cJson/cJSON.h"
const char*message =
"[{                              \
\"name\":\"mculover666\",  \
\"age\": 22,                \
\"weight\": 55.5,          \
\"address\":                \
{                      \
\"country\": \"China\",\
\"zip-code\": 111111\
\"zip-code\": 111111\
},                      \
\"skill\": [\"c\", \"Java\", \"Python\"],\
\"student\": false          \
},        \
{                          \
\"name\":\"dhn\",  \
\"age\": 23,                \
\"weight\": 72.6,          \
\"address\":                \
{                      \
\"country\": \"China\",\
\"zip-code\": 222222\
},                      \
\"skill\": [\"c\", \"linux\", \"Python\"],\
\"student\": true          \
}]";
//
//const char *message =
//"[{                              \
//    \"name\":\"mculover666\",  \
//    \"age\": 22,                \
/
/    \"weight\": 55.5,          \
//    \"address\":                \
//        {                      \
//            \"country\": \"China\",\
//            \"zip-code\": 111111\
//        },                      \
//    \"skill\": [\"c\", \"Java\", \"Python\"],\
//    \"student\": false          \
//}]        \
//";
int main(){
cJSON* cjson_data =NULL;
cJSON* cjson_name =NULL;
cJSON* cjson_age =NULL;
cJSON* cjson_weight =NULL;
cJSON* cjson_address =NULL;
cJSON* cjson_address_country =NULL;
cJSON* cjson_address_zipcode =NULL;
cJSON* cjson_skill =NULL;
cJSON* cjson_student =NULL;
int    skill_array_size =0, i =0;
cJSON* cjson_skill_item =NULL;
/
* 解析整段JSO数据 */
cjson_data =cJSON_Parse(message);
if(cjson_data ==NULL){
//< 当JSON数据格式有错误的时候就会来到这⾥
cJSON_Delete(cjson_data);
cout <<"parse json fail!"<< endl;
return-1;
}
c语言是什么语言开发的//< 下⾯提供了两种打印数据的⽅法,结果会在下⾯贴图显⽰
cout <<"有格式的⽅式打印Json:"<< endl;
char* without_format_print =cJSON_Print(cjson_data);
cout << without_format_print << endl;
free(without_format_print);
cout <<"⽆格式的⽅式打印Json:"<< endl;
cout <<cJSON_PrintUnformatted(cjson_data)<< endl;
//< 这⾥很重要,⼀定要把打印返回的结果释放掉,否则会造成内存泄漏
//< 这⾥是错误的写法,因为不能直接从数据中直接寻name的键,需要将⼦JSON先解析出来然后在解析。//< 还记得上⾯写的中括号的问题吗就在这⾥【】,如果不加中括号这⾥是可以使⽤的,结果会在下⾯贴图。 cjson_name =cJSON_GetObjectItem(cjson_data,"name");
//cout << cjson_name->valuestring;
int tint =cJSON_GetArraySize(cjson_data);
cJSON* arr_item = cjson_data->child;//⼦对象
for(int i =0; i < tint; i++){
for(int i =0; i < tint; i++){
cjson_name =cJSON_GetObjectItem(arr_item,"name");
cjson_age =cJSON_GetObjectItem(arr_item,"age");
cjson_weight =cJSON_GetObjectItem(arr_item,"weight");
cout << cjson_name->valuestring <<"  "<< cjson_age->valueint <<"  "<< cjson_weight->valuedouble << endl; /* 解析⼦JSON */
cjson_address =cJSON_GetObjectItem(arr_item,"address");
cjson_address_country =cJSON_GetObjectItem(cjson_address,"country");
cjson_address_zipcode =cJSON_GetObjectItem(cjson_address,"zip-code");
cout << cjson_address_country->valuestring <<"  "<< cjson_address_zipcode->valueint << endl;
/* 解析数组 */
cjson_skill =cJSON_GetObjectItem(arr_item,"skill");
skill_array_size =cJSON_GetArraySize(cjson_skill);
cout <<"skill:[";
for(int j =0; j < skill_array_size; j++){
cjson_skill_item =cJSON_GetArrayItem(cjson_skill, j);
论坛小程序源码免费下载cout << cjson_skill_item->valuestring <<",";
}
cout <<"\b]"<< endl;
/* 解析布尔型数据 */
imgplay安卓版叫什么cjson_student =cJSON_GetObjectItem(arr_item,"student");
cout <<(cjson_student->valueint ==0?"false":"true")<< endl;
arr_item = arr_item->next;
}
cJSON_Delete(cjson_data);
return0;
}
有格式下的数据打印
⽆格式下的数据打印,相⽐于有格式的打印,此打印⽅法更加节省空间。
,注意:⼀定要记得释放内存。
上⾯对中括号的解答。若加了中括号,利⽤上述代码块的单个JSON数据的解析。
下⾯是程序完整的运⾏结果
python请求并解析json数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。