Cjson替换数组中的某个变量的值
时间: 2023-07-21 17:13:04 浏览: 157
要替换cJSON数组中的某个变量的值,可以使用`cJSON_GetArrayItem()`或`cJSON_GetArrayItemCaseSensitive()`函数获取要替换的元素,然后使用`cJSON_ReplaceItemInArray()`函数替换为新的cJSON对象。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include "cJSON.h"
int main()
{
char *json_str = "{\"name\":\"John\",\"age\":30,\"cars\":[{\"make\":\"Ford\",\"model\":\"Mustang\",\"year\":1967},{\"make\":\"BMW\",\"model\":\"i8\",\"year\":2020},{\"make\":\"Fiat\",\"model\":\"500\",\"year\":2015}]}";
cJSON *root = cJSON_Parse(json_str);
if (root == NULL)
{
fprintf(stderr, "Error before: [%s]\n", cJSON_GetErrorPtr());
return 1;
}
cJSON *cars = cJSON_GetObjectItem(root, "cars");
if (cars == NULL || !cJSON_IsArray(cars))
{
fprintf(stderr, "Invalid JSON format, \"cars\" not found or not an array.\n");
cJSON_Delete(root);
return 1;
}
int index = 1;
cJSON *car = cJSON_GetArrayItem(cars, index);
if (car == NULL || !cJSON_IsObject(car))
{
fprintf(stderr, "Invalid JSON format, \"cars[%d]\" not found or not an object.\n", index);
cJSON_Delete(root);
return 1;
}
cJSON *new_item = cJSON_CreateNumber(2019);
cJSON_ReplaceItemInObject(car, "year", new_item);
char *new_json_str = cJSON_PrintUnformatted(root);
printf("New JSON string:\n%s\n", new_json_str);
cJSON_Delete(root);
free(new_json_str);
return 0;
}
```
这个程序的功能是将输入的JSON字符串中的"cars"数组中的第2个元素(下标为1)的"year"键对应的值替换为2019,然后输出修改后的JSON字符串。
首先,使用`cJSON_Parse()`函数将输入的JSON字符串解析为cJSON对象。然后,使用`cJSON_GetObjectItem()`函数获取"cars"数组对象,如果该对象不存在或不是一个数组,则输出错误信息并退出程序。
接下来,定义要替换的元素的下标和新的cJSON对象。在本例中,要替换的下标为1(即第2个元素),使用`cJSON_GetArrayItem()`函数获取到该元素,并使用`cJSON_IsObject()`函数检查该元素是否为一个对象。如果该元素不存在或不是一个对象,则输出错误信息并退出程序。
然后,创建一个新的cJSON对象,它是一个数字类型的cJSON对象,其值为2019。然后,使用`cJSON_ReplaceItemInObject()`函数将"year"键对应的值替换为新的cJSON对象。
最后,使用`cJSON_PrintUnformatted()`函数将修改后的cJSON对象转换为JSON字符串,并输出到控制台。
注意,在程序结束时,应该使用`cJSON_Delete()`函数释放所有分配的cJSON对象,以及使用`free()`函数释放新的JSON字符串的内存。
阅读全文