JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于 Web 服務(wù)的數(shù)據(jù)交互。JSON 由于其簡(jiǎn)潔易讀的特點(diǎn),已經(jīng)成為了現(xiàn)代編程語言中的一種通用數(shù)據(jù)格式,得到了廣泛的應(yīng)用。而在 C 語言中,解析 JSON 數(shù)據(jù)通常需要使用第三方庫來實(shí)現(xiàn)。
在 C 中,有很多供開發(fā)者使用的 JSON 解析器,如 Jansson 和 cJSON 等,本文將對(duì)其進(jìn)行簡(jiǎn)要介紹。
1. Jansson
/*創(chuàng)建 JSON 對(duì)象*/
json_t *j = json_object();
/*添加鍵值對(duì)*/
json_object_set_new(j, "name", json_string("hello"));
json_object_set_new(j, "number", json_integer(10));
json_object_set_new(j, "is_error", json_boolean(0));
/*生成 JSON 字符串*/
char *str = json_dumps(j, JSON_COMPACT);
/*釋放空間*/
json_decref(j);
Jansson 是一款用 C 語言編寫的 JSON 解析器,它不僅支持解析 JSON 數(shù)據(jù),還支持創(chuàng)建和操作 JSON 數(shù)據(jù)。其 API 相對(duì)較為完整,同樣適合用于開發(fā)大型項(xiàng)目。具體使用方法可以參考上面代碼示例。
2. cJSON
/*解析 JSON 字符串*/
char *str = "{\"name\":\"hello\",\"number\":10,\"is_error\":false}";
cJSON *json = cJSON_Parse(str);
/*獲取鍵值對(duì)*/
const cJSON *name = cJSON_GetObjectItem(json, "name");
const cJSON *number = cJSON_GetObjectItem(json, "number");
const cJSON *is_error = cJSON_GetObjectItem(json, "is_error");
/*輸出結(jié)果*/
printf("name:%s\n", name->valuestring);
printf("number:%d\n", number->valueint);
printf("is_error:%d\n", is_error->valueint);
/*釋放空間*/
cJSON_Delete(json);
cJSON 是另一種常用的 JSON 解析器,相對(duì)于 Jansson 來說,它更加輕量級(jí),并且擁有非常靈活的 API。對(duì)于 JSON 數(shù)據(jù)的解析,只需要通過 cJSON_Parse 函數(shù)解析輸入的 JSON 字符串,就可以得到一個(gè) cJSON 類型的對(duì)象,通過 cJSON_GetObjectItem 函數(shù)即可獲取 JSON 數(shù)據(jù)中的鍵值對(duì)。使用方法可以參考上面代碼示例。
C 中的 JSON 解析庫并不止這兩種,開發(fā)者可以根據(jù)自身需求和項(xiàng)目大小來選擇不同的解析器,以便提高開發(fā)效率。