cjson解析一个json文件,有三个json数据,最后一个数据又嵌套一个json
时间: 2024-03-17 16:41:55 浏览: 73
假设你有一个名为test.json的JSON文件,其中包含三个JSON数据,最后一个数据又嵌套了一个JSON,可以按照以下步骤使用cJSON库解析:
1. 读取JSON文件内容,并将其存储在一个字符串中。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"
int main() {
FILE *fp = fopen("test.json", "r");
if (fp == NULL) {
printf("Failed to open file!\n");
return 1;
}
fseek(fp, 0, SEEK_END);
long file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char *json_str = (char *)malloc((file_size + 1) * sizeof(char));
memset(json_str, 0, (file_size + 1) * sizeof(char));
fread(json_str, sizeof(char), file_size, fp);
fclose(fp);
```
2. 使用cJSON_Parse函数解析JSON字符串。
```
cJSON *json = cJSON_Parse(json_str);
if (json == NULL) {
printf("Failed to parse JSON string!\n");
free(json_str);
return 1;
}
```
3. 使用cJSON_GetArrayItem函数获取JSON数组中的元素,并使用cJSON_Print函数将元素的值打印出来。
```
cJSON *item1 = cJSON_GetArrayItem(json, 0);
if (item1 != NULL) {
printf("item1: %s\n", cJSON_Print(item1));
}
cJSON *item2 = cJSON_GetArrayItem(json, 1);
if (item2 != NULL) {
printf("item2: %s\n", cJSON_Print(item2));
}
cJSON *item3 = cJSON_GetArrayItem(json, 2);
if (item3 != NULL) {
printf("item3: %s\n", cJSON_Print(item3));
}
```
4. 对于第三个JSON数据,使用cJSON_GetObjectItem函数获取嵌套的JSON对象,并使用cJSON_Print函数将对象的值打印出来。
```
cJSON *obj = cJSON_GetObjectItem(item3, "obj");
if (obj != NULL) {
printf("obj: %s\n", cJSON_Print(obj));
}
```
5. 释放内存。
```
cJSON_Delete(json);
free(json_str);
return 0;
}
```
注意,使用cJSON库解析JSON时需要注意内存分配和释放,以及错误处理等问题。上述代码只是一个简单的示例,实际使用时需要根据具体情况进行修改和完善。
阅读全文