注,记录一些常见的json报文的创建与解析,方便平时使用时到处去找示例
一、基础的json对象的创建与解析
1、创建
报文示例:
"type": { "id": 1, "name": "hello" } |
构建代码示例
cJSON *p_item = cJSON_CreateObject(); cJSON *root=NULL;
root = cJSON_CreateObject(); cJSON_AddNumberToObject(root, "id", 1); cJSON_AddStringToObject(root, "name", "hello"); cJSON_AddItemToObject(p_item,"type",root); cJSON_Print(p_item); |
解析代码示例
获取到上例的p_item cJSON *p_type= cJSON_GetObjectItem(p_item, "type"); cJSON *p_id = cJSON_GetObjectItem(p_type, "id"); cJSON *p_name = cJSON_GetObjectItem(p_name, "name"); |
二、一类数组对象的创建与解析
报文示例
{ "device_list": [ { "id": "11111", "name": "hello" }, { "id": "11111", "name": "hello" } ], } |
创建代码示例
cJSON *root = NULL; cJSON *dev_obj=NULL; cJSON *p_item = cJSON_CreateObject(); root = cJSON_CreateArray(); for (size_t i = 0; i < 2; i++) { dev_obj = cJSON_CreateObject(); //添加元素 cJSON_AddStringToObject(dev_obj, "id", "11111"); cJSON_AddStringToObject(dev_obj, "name", "hello"); cJSON_AddItemToArray(root, dev_obj); } cJSON_AddItemToObject(p_item,"device_list",root); cJSON_Print(p_item); |
解析示例
//解析数组元素个数 int length = cJSON_GetArraySize(device_list); cJSON *sub_obj = NULL; cJSON *id=NULL; cJSON *name=NULL; for(i=0;i<length;i++) { sub_obj = cJSON_GetArrayItem(device_list,i); id= cJSON_GetObjectItem(sub_obj,"id"); name= cJSON_GetObjectItem(sub_obj,"name"); } |
三、二类只包含数组元素的json数组的创建与解析
报文示例
{ "device_list":[ "0", "1" ], } |
报文创建
cJSON *ret_json = cJSON_CreateArray(); cJSON *json_obj =NULL; for(int k=0;k<2;k++) { json_obj = cJSON_CreateString( k ); cJSON_AddItemToArray(ret_json,json_obj); } return ret_json; |
解析报文
cJSON *json_in=NULL; cJSON *json_type=NULL; int len = 0; int i = 0; char tmp[128]={0}; len = cJSON_GetArraySize(json_in); for(i=0;i<len;i++) { json_type = cJSON_GetArrayItem(json_in,i); strcpy(tmp,cJSON_GetStringValue(json_type)); } |