JSON是JavaScript Object Notation的縮寫,它是一種輕量級(jí)的數(shù)據(jù)交換格式。JSON文件的結(jié)構(gòu)可以簡(jiǎn)單地形容為鍵值對(duì)的集合,其中鍵是字符串而值可以是字符串、數(shù)字、對(duì)象、數(shù)組等類型。在C語(yǔ)言中,我們可以使用第三方庫(kù)來(lái)解析JSON文件。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> int main() { char *json_str = "{\"name\":\"Tom\", \"age\":20}"; json_error_t error; json_t *json = json_loads(json_str, 0, &error); if (json == NULL) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return 1; } const char *name = json_string_value(json_object_get(json, "name")); int age = json_integer_value(json_object_get(json, "age")); printf("name: %s\n", name); printf("age: %d\n", age); json_decref(json); return 0; }
上述代碼中,我們首先定義了一個(gè)JSON字符串,然后使用json_loads函數(shù)將其解析為一個(gè)json_t類型的指針。如果解析出錯(cuò),則會(huì)返回NULL并且打印錯(cuò)誤信息。接著,我們使用json_object_get函數(shù)根據(jù)鍵獲取對(duì)應(yīng)的值,并通過(guò)適當(dāng)?shù)膉son_xxx_value函數(shù)將其轉(zhuǎn)換為C語(yǔ)言中的相應(yīng)類型。最后,我們使用json_decref函數(shù)釋放內(nèi)存并返回0表示成功。
C語(yǔ)言中的JSON解析庫(kù)有很多,比如YAJL、cJSON等等。這些庫(kù)的使用方式略有不同,但思路都是一樣的:將JSON字符串解析成程序可以操作的數(shù)據(jù)類型,然后對(duì)該類型進(jìn)行相應(yīng)的操作。