C JSON序列化和反序列化主要用于將C語(yǔ)言結(jié)構(gòu)體數(shù)據(jù)轉(zhuǎn)化為JSON格式數(shù)據(jù),并且可將JSON格式數(shù)據(jù)轉(zhuǎn)化為C語(yǔ)言結(jié)構(gòu)體數(shù)據(jù),實(shí)現(xiàn)C語(yǔ)言和JSON之間的互相轉(zhuǎn)化。
一般情況下C JSON序列化使用json-c庫(kù),該庫(kù)提供了一些適用于C語(yǔ)言的JSON序列化和反序列化API函數(shù),具有輕量級(jí)、簡(jiǎn)單易用的特點(diǎn),是C語(yǔ)言中JSON序列化和反序列化的首選庫(kù)。
C JSON序列化主要使用json_object_new_XXX()函數(shù)將C語(yǔ)言的類型轉(zhuǎn)化為對(duì)應(yīng)的JSON類型,再使用json_object_set_XXX()函數(shù)添加到j(luò)son_object對(duì)象中。代碼如下:
#include <stdio.h> #include <json-c/json.h> int main() { json_object *jobj = json_object_new_object(); // 創(chuàng)建json_object對(duì)象 json_object *jstring = json_object_new_string("hello, world"); // 創(chuàng)建json string類型對(duì)象 json_object_object_add(jobj, "msg", jstring); // 將json string類型對(duì)象添加到j(luò)son_object對(duì)象中 char *str = json_object_to_json_string(jobj); // 將json_object對(duì)象序列化為JSON格式字符串 printf("%s\n", str); // 輸出結(jié)果:{"msg":"hello, world"} json_object_put(jobj); // 釋放json_object對(duì)象 }
C JSON反序列化主要使用json_tokener_parse()函數(shù)將JSON格式字符串轉(zhuǎn)化為json_object對(duì)象,然后使用json_object_object_get_XXX()函數(shù)獲取對(duì)應(yīng)的JSON值類型,并將其轉(zhuǎn)化為C語(yǔ)言的類型。代碼如下:
#include <stdio.h> #include <json-c/json.h> int main() { char *str = "{\"msg\":\"hello, world\"}"; // JSON格式字符串 json_object *jobj = json_tokener_parse(str); // 將JSON格式字符串轉(zhuǎn)化為json_object對(duì)象 json_object *jstring = json_object_object_get(jobj, "msg"); // 從json_object對(duì)象中獲取json string類型對(duì)象 const char *msg = json_object_get_string(jstring); // 將json string類型對(duì)象轉(zhuǎn)化為C語(yǔ)言字符串 printf("%s\n", msg); // 輸出結(jié)果:hello, world json_object_put(jobj); // 釋放json_object對(duì)象 }