淘先锋技术网

首页 1 2 3 4 5 6 7

JSON(JavaScript Object Notation)是一种常见的数据交换格式,它由一个带有键值对的集合组成。C语言也有一些库可以处理JSON数据,比如CJSON和Jansson。在某些情况下,我们需要将单个JSON转换为嵌套的JSON,以便更好地组织数据。

下面我们使用CJSON库来实现将单个JSON转换为嵌套的JSON的示例:

#include#include#include#include "cJSON.h" //包含CJSON库的头文件
int main()
{
const char *jsonStr = "{\"name\":\"Tom\",\"age\":\"18\",\"car\":{\"brand\":\"BMW\",\"color\":\"blue\"}}"; //待转换的JSON字符串
cJSON *root = cJSON_Parse(jsonStr); //将JSON字符串转换为CJSON的结构体对象
cJSON *newRoot = cJSON_CreateObject();  //创建新的根节点
//将第一层的键值对添加到新的根节点中
cJSON_AddItemToObject(newRoot, "name", cJSON_GetObjectItem(root, "name"));
cJSON_AddItemToObject(newRoot, "age", cJSON_GetObjectItem(root, "age"));
//创建新的子对象
cJSON *carObj = cJSON_CreateObject();
cJSON_AddItemToObject(carObj, "brand", cJSON_GetObjectItem(cJSON_GetObjectItem(root, "car"), "brand"));
cJSON_AddItemToObject(carObj, "color", cJSON_GetObjectItem(cJSON_GetObjectItem(root, "car"), "color"));
//将子对象添加到新的根节点中
cJSON_AddItemToObject(newRoot, "car", carObj);
char *newJsonStr = cJSON_Print(newRoot); //将新的CJSON结构体对象转换为JSON字符串
printf("newJsonStr:%s\n", newJsonStr);
free(newJsonStr);
cJSON_Delete(root); //释放CJSON结构体对象的内存
cJSON_Delete(newRoot);
return 0;
}

在以上示例中,我们首先使用CJSON库的函数cJSON_Parse将JSON字符串转换为CJSON结构体对象root。接着,我们使用cJSON_CreateObject函数创建一个新的根节点newRoot,将第一层的键值对添加到新的根节点中(这一步其实可以直接使用cJSON_Duplicate函数将root中的键值对复制进来)。然后,我们又使用cJSON_CreateObject创建一个新的子对象carObj,将第二层的键值对添加到子对象中。最后,我们将子对象添加到新的根节点中,并使用cJSON_Print函数将新的CJSON结构体对象转换为JSON字符串。

以上就是将单个JSON转换为嵌套JSON的基本方法,理解后可以结合实际需求进行改进。