淘先锋技术网

首页 1 2 3 4 5 6 7

C 是一种广泛使用的编程语言,用于开发各种软件系统。在处理 JSON 格式的数据时,有时需要将其反序列化(Deserialize),即将 JSON 字符串转换为 C 中的对象,以方便对其进行处理。

在 C 中,反序列化 JSON 需要使用第三方库,常见的有:

- cJSON:一个轻量级的C语言JSON解析器
- jansson:C语言中的JSON编码、解码器
- yajl:一个快速、无依赖、高容错、轻量级的JSON解析器/生成器库

下面以 cJSON 为例,介绍如何使用 C 反序列化 JSON。

#include <stdio.h>
#include <cJSON.h>
int main()
{
char *json_str = "{\"name\":\"张三\",\"age\":20,\"scores\":[80,90,95]}";
cJSON *root = cJSON_Parse(json_str); // 将 JSON 字符串解析成 cJSON 对象
cJSON *name = cJSON_GetObjectItem(root, "name"); // 获取属性值
printf("姓名:%s\n", name->valuestring);
cJSON *age = cJSON_GetObjectItem(root, "age");
printf("年龄:%d\n", age->valueint);
cJSON *scores = cJSON_GetObjectItem(root, "scores");
for(int i=0; i<cJSON_GetArraySize(scores); i++) // 遍历数组
{
cJSON *score = cJSON_GetArrayItem(scores, i);
printf("成绩:%d\n", score->valueint);
}
cJSON_Delete(root); // 释放 cJSON 对象内存
return 0;
}

在上述代码中,首先定义了一个 JSON 字符串,然后使用 cJSON_Parse() 函数将其解析成 cJSON 对象。接着使用 cJSON_GetObjectItem() 函数获取属性值,其中需要指定对象和属性名。对于数组类型的属性,可以通过 cJSON_GetArraySize() 函数获取数组长度,再使用 cJSON_GetArrayItem() 获取具体的每个元素。

最后需要释放 cJSON 对象的内存,以避免内存泄露问题。

通过上述方式,可以方便地在 C 语言中反序列化 JSON,并对其进行处理。