JSON(JavaScript Object Notation)和XML(Extensible Markup Language)是最常用的兩種數據交互格式,它們都有各自的優點和缺點。當我們需要將數據從JSON格式轉換為XML格式時,可以使用C語言編寫轉換程序。
在C語言中,我們可以使用第三方庫json-c來解析JSON格式的數據。該庫提供了一個名為json_object_to_xml_string的函數,可以將JSON對象轉換為對應的XML字符串。以下是一個示例代碼:
#include <json-c/json.h> #include <stdio.h> int main() { char* json_str = "{ \"name\": \"john\", \"age\": 18 }"; struct json_object* json_obj = json_tokener_parse(json_str); const char* xml_str = json_object_to_xml_string(json_obj); printf("%s", xml_str); return 0; }
代碼中,json_tokener_parse函數用于將JSON格式的字符串解析成一個json_object對象。然后,通過json_object_to_xml_string函數,將該對象轉換為XML格式的字符串,并打印出來。
同樣地,當我們需要將XML格式的數據轉換為JSON格式時,可以使用C語言編寫轉換程序。在C語言中,我們可以使用第三方庫libxml2來解析XML格式的數據。該庫提供了一個名為xmlDocGetRootElement的函數,可以獲取XML文檔的根節點。以下是一個示例代碼:
#include <libxml/parser.h> #include <libxml/tree.h> #include <json-c/json.h> #include <stdio.h> int main() { char* xml_str = "<person><name>john</name><age>18</age></person>"; xmlDocPtr doc = xmlParseMemory(xml_str, strlen(xml_str)); xmlNodePtr root = xmlDocGetRootElement(doc); struct json_object* json_obj = json_object_new_object(); for(xmlNodePtr cur = root->xmlChildrenNode; cur != NULL; cur = cur->next) { if(cur->type == XML_ELEMENT_NODE) { char* key = (char*)cur->name; char* value = (char*)xmlNodeGetContent(cur); json_object_object_add(json_obj, key, json_object_new_string(value)); } } const char* json_str = json_object_to_json_string(json_obj); printf("%s", json_str); return 0; }
代碼中,xmlParseMemory函數用于將XML格式的字符串解析成一個xmlDocPtr對象,然后通過xmlDocGetRootElement函數獲取根節點。接下來,我們用一個循環遍歷根節點的所有子節點,將子節點的名稱作為JSON對象的鍵,將子節點的內容作為JSON對象的值,并利用json_object_object_add函數將鍵值對添加到JSON對象中。最后,通過json_object_to_json_string函數,將JSON對象轉換成JSON格式的字符串,并打印出來。