本文主要是介绍cJSON:封装与解析(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
该篇介绍使用 cJSON 封装和解析数组。cJSON的简单使用请看这篇。
测试字符串:
{"name": "children info","info": [{"name": "lilei","age": 5,"height": 0.45}, {"name": "lily","age": 4,"height": 0.35}, {"name": "hanmeimei","age": 4,"height": 0.4}]
}
1. 封装
enum json_print_formate
{PRINT_FORMATE = 0, /*按 json 格式输出*/PRINT_UNFORMATE, /*以字符串形式输出*/
};char *json_array_package(enum json_print_formate flag)
{cJSON *root = NULL; cJSON *info = NULL;cJSON *child_info = NULL;char *out = NULL;root = cJSON_CreateObject(); /*创建 json 根节点*/cJSON_AddStringToObject(root, "name", "children info"); /*添加字符串*/info = cJSON_CreateArray(); /*创建 json 数组*/cJSON_AddItemToObject(root, "info", info); /*将数组加入到根节点*/child_info = cJSON_CreateObject(); /*向数组中添加成员*/cJSON_AddItemToArray(info, child_info);cJSON_AddStringToObject(child_info, "name", "lilei"); /*添加字符串*/cJSON_AddNumberToObject(child_info, "age", 5); /*添加整型*/cJSON_AddNumberToObject(child_info, "height", 0.45); /*添加浮点型*/child_info = cJSON_CreateObject(); /*向数组中添加成员*/cJSON_AddItemToArray(info, child_info);cJSON_AddStringToObject(child_info, "name", "lily"); /*添加字符串*/cJSON_AddNumberToObject(child_info, "age", 4); /*添加整型*/cJSON_AddNumberToObject(child_info, "height", 0.35); /*添加浮点型*/child_info = cJSON_CreateObject(); /*向数组中添加成员*/cJSON_AddItemToArray(info, child_info);cJSON_AddStringToObject(child_info, "name", "hanmeimei"); /*添加字符串*/cJSON_AddNumberToObject(child_info, "age", 4); /*添加整型*/cJSON_AddNumberToObject(child_info, "height", 0.40); /*添加浮点型*/if(PRINT_FORMATE == flag){out = cJSON_Print(root); }else{out = cJSON_PrintUnformatted(root); /*将json形式打印成正常字符串形式*/}/*释放内存*/ cJSON_Delete(root); return out;
}
2. 解析
void json_array_parse(char *json_string)
{cJSON *root = NULL; /*json 根节点*/cJSON *name = NULL;cJSON *jarray = NULL; /*json 数组*/cJSON *member = NULL;cJSON *age = NULL;cJSON *height = NULL;root = cJSON_Parse(json_string);name = cJSON_GetObjectItem( root , "name" );printf("root name:%s\n", name->valuestring);jarray = cJSON_GetObjectItem(root, "info");cJSON_ArrayForEach(member, jarray) /*遍历数组*/{name = cJSON_GetObjectItem( member , "name" );age = cJSON_GetObjectItem( member , "age" );height = cJSON_GetObjectItem( member , "height" );printf("name:%s, age:%d, height:%f\n", name->valuestring, age->valueint, height->valuedouble);}/*释放内存*/ cJSON_Delete(root);
}
3. 测试
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"cJSON.h"int main()
{char *json_str = NULL;json_str = json_array_package(PRINT_FORMATE);printf("array formate:\n%s\n", json_str);json_array_parse(json_str);cJSON_free(json_str);json_str = json_array_package(PRINT_UNFORMATE);printf("\narray unformate:\n%s\n", json_str);json_array_parse(json_str);cJSON_free(json_str);}
CMakeLists.txt
cmake_minimum_required(VERSION 3.5)project(json_test)include_directories(./)aux_source_directory(./ SRC_FILES)add_executable(${PROJECT_NAME} ${SRC_FILES})
4. 结果
array formate:
{"name": "children info","info": [{"name": "lilei","age": 5,"height": 0.45}, {"name": "lily","age": 4,"height": 0.35}, {"name": "hanmeimei","age": 4,"height": 0.4}]
}
root name:children info
name:lilei, age:5, height:0.450000
name:lily, age:4, height:0.350000
name:hanmeimei, age:4, height:0.400000array unformate:
{"name":"children info","info":[{"name":"lilei","age":5,"height":0.45},{"name":"lily","age":4,"height":0.35},{"name":"hanmeimei","age":4,"height":0.4}]}
root name:children info
name:lilei, age:5, height:0.450000
name:lily, age:4, height:0.350000
name:hanmeimei, age:4, height:0.400000
Note:
cJSON_Print(const cJSON *item) 和 cJSON_PrintUnformatted(const cJSON *item) 这两个函数会调用 malloc 分配内存,需要调用 cJSON_free(void *object) 进行释放。
上一篇
这篇关于cJSON:封装与解析(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!