在進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交互過(guò)程中,經(jīng)常需要使用到JSON格式的數(shù)據(jù)傳輸與解析,C語(yǔ)言作為一門底層語(yǔ)言,也提供了相應(yīng)的JSON解析庫(kù)。本文將會(huì)介紹如何使用C語(yǔ)言來(lái)解析JSON格式的數(shù)據(jù)。
#include <stdio.h>
#include <jansson.h>
int main()
{
const char *json_string = "{"name": "小明", "age": 18, "address": {"province": "廣東省", "city": "深圳市"}}";
json_t *root;
json_error_t error;
root = json_loads(json_string, 0, &error);
if(!root)
{
printf("解析JSON數(shù)據(jù)失敗:%s\n", error.text);
return -1;
}
json_t *name = json_object_get(root, "name");
printf("名字:%s\n", json_string_value(name));
json_t *age = json_object_get(root, "age");
printf("年齡:%d\n", json_integer_value(age));
json_t *address = json_object_get(root, "address");
json_t *province = json_object_get(address, "province");
printf("省份:%s\n", json_string_value(province));
json_t *city = json_object_get(address, "city");
printf("城市:%s\n", json_string_value(city));
json_decref(root);
return 0;
}
代碼的主要功能是解析一個(gè)JSON字符串,獲取其中的數(shù)據(jù),并輸出到控制臺(tái),由于使用了第三方庫(kù)jansson.h,所以需要在代碼中引入相應(yīng)的頭文件。
json_loads函數(shù)將JSON字符串轉(zhuǎn)換成一個(gè)JSON對(duì)象,如果返回值為NULL,則說(shuō)明轉(zhuǎn)換失敗,此時(shí)需要通過(guò)json_error_t結(jié)構(gòu)體獲取錯(cuò)誤信息。
json_object_get函數(shù)可以根據(jù)鍵名獲取JSON對(duì)象中指定的值,需要注意的是,獲取到的JSON對(duì)象還需要根據(jù)具體的類型來(lái)進(jìn)行進(jìn)一步操作。
在使用完畢后,需要通過(guò)json_decref函數(shù)來(lái)釋放占用的內(nèi)存空間,以避免內(nèi)存泄漏的問題。