在C语言中,解析JSON数据需要使用第三方库,常见的库有两种:cJSON和jansson。
下面以cJSON为例介绍如何使用。
#include <stdio.h> #include <cjson/cJSON.h> int main() { char *json_str = "{\"name\":\"Alice\",\"age\":20}"; cJSON *json = cJSON_Parse(json_str); // 解析JSON字符串 if (json != NULL) { cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name"); // 获取字符串类型的值 cJSON *age = cJSON_GetObjectItemCaseSensitive(json, "age"); // 获取数值类型的值 if (cJSON_IsString(name) && cJSON_IsNumber(age)) { // 判断类型是否正确 printf("%s is %d years old.\n", name->valuestring, age->valueint); // 打印结果 } cJSON_Delete(json); // 释放内存 } else { printf("JSON string is invalid.\n"); } return 0; }
以上代码解析了一个JSON对象,取出其中的name和age字段,分别打印出来。其中例子中的JSON字符串为:
{ "name": "Alice", "age": 20 }
函数cJSON_Parse用于解析JSON字符串,返回一个指向cJSON结构体的指针。函数cJSON_GetObjectItemCaseSensitive用于获取JSON对象字段的值,第一个参数为JSON对象,第二个参数为字段名。在获取字段值的时候需要判断类型是否正确,函数cJSON_IsString和cJSON_IsNumber用于判断是否为字符串类型和数值类型。最后需要使用cJSON_Delete释放内存。