cJSON两种数组处理方式
·
json数据例子:
第一层数组,第二层json结构体,第三层键值对,第四层数组(含json结构体组成的数组和一般数组)
[{
"columns":[
{"name":"Time"},
{"time":"Number"}
],
"rows":[
"abc","123"
],
"type":"table"
}]
解析
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main()
{
char *text = "[{\"columns\":[{\"name\":\"Time\"},{\"time\":\"Number\"}],\"rows\":[\"abc\",\"123\"],\"type\":\"table\"}]";
cJSON * root = cJSON_Parse(text);
if(!root) {
printf("no json\n");
return -1;
}
if (!cJSON_IsArray(root)){
printf("no Array\n");
return -1;
}
//数组长度
int array_size = cJSON_GetArraySize(root);
cJSON *items;
cJSON *item;
cJSON *columns;
cJSON *rows;
cJSON *name = NULL;
for(int i=0; i< array_size; i++) {
items = cJSON_GetArrayItem(root, i);
//解析columns
columns = cJSON_GetObjectItem(items, "columns");
if (!columns) {
printf("no columns!\n");
return -1;
}
int columns_size = cJSON_GetArraySize(columns);
for(int j=0; j< columns_size; j++) {
item = cJSON_GetArrayItem(columns, j);
name = cJSON_GetObjectItem(item, "name");
printf("%s\t",name->valuestring);
}
//解析rows
rows = cJSON_GetObjectItem(items, "rows");
if (!rows) {
printf("no rows!\n");
return -1;
}
int rows_size = cJSON_GetArraySize(rows);
for(int j=0; j< rows_size; j++) {
item = cJSON_GetArrayItem(rows, j);
printf("%s\t",item->valuestring);
}
printf("%d\n",rows->valueint);
}
cJSON_Delete(root);
}
构建json
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main()
{
cJSON *root = NULL;
char *str_print = NULL;
/* 创建cJSON对象 */
root = cJSON_CreateArray(); // 创建数组
cJSON *items = cJSON_CreateObject(); /* 创建一个cJSON对象,要用 cJSON_Delete 释放内存 */
/* 添加json节点 */
cJSON *columns = cJSON_CreateArray(); /* 创建数组 */
cJSON *item1 = cJSON_CreateObject();
cJSON_AddStringToObject(item1, "name", "Time");
cJSON *item2 = cJSON_CreateObject();
cJSON_AddStringToObject(item2, "time", "Number");
cJSON_AddItemToArray(columns,item1);
cJSON_AddItemToArray(columns,item2);
cJSON_AddItemToObject(items,"columns",columns);
/* 添加json节点 */
cJSON *rows = cJSON_CreateArray(); /* 创建数组 */
cJSON_AddItemToArray(rows,cJSON_CreateString("abc"));
cJSON_AddItemToArray(rows,cJSON_CreateString("123"));
cJSON_AddItemToObject(items,"rows",rows);
/* 添加json节点 */
cJSON_AddStringToObject(items, "type","table");
cJSON_AddItemToArray(root,items);
/* 打印 */
str_print = cJSON_Print(root);
if(str_print != NULL)
{
printf("%s\n", str_print);
cJSON_free(str_print);
str_print = NULL;
}
/* 释放内存 */
if(root != NULL)
cJSON_Delete(root); // 防止内存泄露,会把下面所有的子节点都释放
return 0;
}
更多推荐
已为社区贡献9条内容
所有评论(0)