在編程過程中,有時需要將JSON格式的數據轉換為XML格式,這可以通過使用C語言中的一些庫來輕松實現。其中,使用CJSON庫和libXML庫是兩種常見的方法。
首先,我們需要導入CJSON和libXML的頭文件:
#include "cJSON.h" #include#include
然后,我們可以先將JSON數據解析為cJSON格式:
char *json_string = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}"; cJSON *root = cJSON_Parse(json_string);
接著,我們可以創建一個xmlDocPtr類型的文檔對象,用libXML庫的函數將cJSON格式的數據轉換為XML格式:
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0"); xmlNodePtr root_node = xmlNewNode(NULL, BAD_CAST "root"); xmlDocSetRootElement(doc, root_node); xmlNodePtr child_node = cJSON2xml(root_node, root); // 將cJSON格式的數據轉換為XML格式
其中,cJSON2xml函數是我們自己編寫的用于將cJSON格式轉換為XML格式的函數。其代碼如下:
xmlNodePtr cJSON2xml(xmlNodePtr xml_node, cJSON *cjson_node) { xmlNodePtr new_xml_node = NULL; while (cjson_node != NULL) { switch (cjson_node->type) { case cJSON_NULL: new_xml_node = xmlNewText(BAD_CAST ""); break; case cJSON_Number: new_xml_node = xmlNewText(BAD_CAST cJSON_Print(cjson_node)); break; case cJSON_String: new_xml_node = xmlNewText(BAD_CAST cJSON_GetStringValue(cjson_node)); break; case cJSON_Array: new_xml_node = xmlNewNode(NULL, BAD_CAST "array"); cJSON_ArrayForEach(cjson_node, cjson_node) { cJSON2xml(new_xml_node, cjson_node); } break; case cJSON_Object: new_xml_node = xmlNewNode(NULL, BAD_CAST cJSON_GetObjectItem(cjson_node, "name")->valuestring); cJSON *child_node = cJSON_GetObjectItem(cjson_node, "value"); cJSON2xml(new_xml_node, child_node); xmlAddChild(xml_node, new_xml_node); break; } xmlAddChild(xml_node, new_xml_node); cjson_node = cjson_node->next; } return xml_node; }
最后,我們可以使用libXML庫的函數將XML格式的數據保存到文件中:
xmlSaveFormatFileEnc("output.xml", doc, "UTF-8", 1);
這樣,我們就成功將JSON格式的數據轉換為XML格式,并保存到了文件中。
上一篇python 計劃圖
下一篇python 文件續寫