在C語(yǔ)言開發(fā)中,JSON是一種常見的數(shù)據(jù)交換格式。JSON有著簡(jiǎn)單易用的結(jié)構(gòu),非常適合在不同系統(tǒng)之間進(jìn)行數(shù)據(jù)交互。
當(dāng)我們需要將JSON數(shù)據(jù)轉(zhuǎn)換為C字符串時(shí),可以使用JSON庫(kù)和相關(guān)函數(shù)來(lái)完成。以下是一個(gè)例子:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> int main(int argc, char **argv) { json_t *root; json_error_t error; const char *json_str = "{\"name\":\"Tom\",\"age\":20,\"gender\":\"male\"}"; char *c_str; root = json_loads(json_str, 0, &error); if (!root) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return 1; } c_str = json_dumps(root, JSON_ENCODE_ANY | JSON_COMPACT); printf("%s\n", c_str); free(c_str); json_decref(root); return 0; }
在上面的代碼中,我們使用了JSON-C這個(gè)JSON解析庫(kù),通過(guò)json_loads函數(shù)將JSON字符串轉(zhuǎn)換為一個(gè)json_t類型的結(jié)構(gòu)體,然后再使用json_dumps函數(shù)將其轉(zhuǎn)換為C字符串。
其中,json_dumps函數(shù)有兩個(gè)參數(shù),第一個(gè)是要轉(zhuǎn)換的json_t對(duì)象,第二個(gè)是轉(zhuǎn)換選項(xiàng),比如JSON_ENCODE_ANY表示可以編碼任何Unicode字符,JSON_COMPACT表示輸出緊湊格式的字符串。
需要注意的是,使用完成后需要通過(guò)json_decref函數(shù)釋放json_t對(duì)象的內(nèi)存,同時(shí)需要手動(dòng)釋放C字符串的內(nèi)存。