在實際的開發中,我們常常需要將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對象。
上一篇vue 2 scss
下一篇python+像素疊加