欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c json轉化xml

錢淋西2年前8瀏覽0評論

在實際的開發中,我們常常需要將JSON格式的數據轉化成XML格式,而C語言提供的JSON轉化XML的方式就是通過第三方庫libxml2來實現的。

// 引入頭文件
#include#include#include#include// 將JSON轉化成XML的函數
xmlNodePtr json_to_xml(json_object *jobj, xmlDocPtr doc)
{
xmlNodePtr node = NULL;
json_object_object_foreach(jobj, key, val)
{
if (json_object_is_type(val, json_type_object))
{
// 創建一個XML結點
node = xmlNewNode(NULL, BAD_CAST key);
// 將json轉換為xml
xmlAddChild(node, json_to_xml(val, doc));
}
else if (json_object_is_type(val, json_type_array))
{
json_object *array = val;
int len = json_object_array_length(array);
for (int i = 0; i< len; i++)
{
node = xmlNewNode(NULL, BAD_CAST key);
xmlAddChild(node, json_to_xml(json_object_array_get_idx(array, i), doc));
}
}
else
{
node = xmlNewNode(NULL, BAD_CAST key);
xmlNodeSetContent(node, BAD_CAST json_object_get_string(val));
}
// 將結點添加到根結點上
xmlAddChild(xmlDocGetRootElement(doc), node);
}
return node;
}
int main()
{
// 待轉化的JSON數據
char *json_str = "{\"name\":\"Tom\",\"age\":18,\"hobbies\":[\"music\",\"movie\",\"reading\"]}";
// 轉化為JSON對象
json_object *jobj = json_tokener_parse(json_str);
// 創建一個XML文檔
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
// 將JSON轉化為XML
xmlNodePtr root = json_to_xml(jobj, doc);
// 序列化XML
xmlChar *xmlbuff = NULL;
int buffersize = 0;
xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);
printf("%s\n", xmlbuff);
// 釋放內存
xmlFreeDoc(doc);
xmlFree(xmlbuff);
json_object_put(jobj);
return 0;
}

上述代碼實現了將JSON數據轉化為XML文檔的功能,通過JSON庫json-c將JSON數據轉換為json_object,然后利用libxml2庫將JSON對象轉化為XML對象。不難發現,在將JSON對象轉化成XML對象的過程中,主要是利用遞歸的方式對JSON數據進行處理,通過xmlNewNode()函數來創建XML結點,然后根據JSON數據類型的不同,利用xmlAddChild()函數來添加子結點,最后利用xmlDocDumpFormatMemory()函數將XML對象進行序列化。實際上,在開發中我們也可以利用類似的方式將XML轉化為JSON對象。