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的基本方法,理解后可以结合实际需求进行改进。