C語言中,使用JSON實現(xiàn)不同平臺之間的數(shù)據(jù)交換是一個常見的需求。而將JSON數(shù)據(jù)轉(zhuǎn)換成字符串,則是實現(xiàn)這個目標(biāo)的一種重要手段。下面就來介紹一下,在C語言中如何將JSON數(shù)據(jù)轉(zhuǎn)成字符串。
#include <stdio.h> #include <string.h> #include <jansson.h> int main() { json_t *root = json_pack("{s:s,s:i,s:y}", "name", "Tom", "age", 18, "gender", 'M'); char *str = json_dumps(root, JSON_INDENT(2)); printf("%s\n", str); free(str); json_decref(root); return 0; }
上述代碼使用了開源的JSON庫"jansson.h",首先我們需要將JSON數(shù)據(jù)轉(zhuǎn)為"jansson"庫的數(shù)據(jù)結(jié)構(gòu)。在上面的代碼中,我們使用了json_pack()函數(shù)來實現(xiàn)這個目的。在"json_pack()"函數(shù)中,我們可以定義一個JSON對象,并在其中定義各個屬性,最后返回一個對應(yīng)的"jansson"數(shù)據(jù)結(jié)構(gòu)。
而我們還需將"jansson"數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成JSON字符串,以便在網(wǎng)絡(luò)中傳輸。此時,我們可以使用"json_dumps()"函數(shù),在函數(shù)中傳入要轉(zhuǎn)換的JSON數(shù)據(jù)結(jié)構(gòu)。其中,第二個參數(shù)是一個指定了縮進層數(shù)的選項參數(shù)。如果設(shè)置了縮進,生成的JSON字符串將更加美觀,方便我們Debug和查看。
最后,我們需要釋放掉生成的字符串和"jansson"數(shù)據(jù)結(jié)構(gòu),以免造成內(nèi)存泄露。代碼中的"json_decref()"函數(shù)可以實現(xiàn)"jansson"數(shù)據(jù)結(jié)構(gòu)的釋放。