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,并对其进行处理。