在現代的軟件開發中,不同系統之間的數據交換變得越來越普遍。XML(可擴展標記語言)和JSON(JavaScript對象表示)是兩種常用的在系統之間交換數據的格式。在不同的場景下考慮使用不同的格式,比如XML通常適用于復雜的數據結構,而JSON更多用于類似于Web應用的輕量級應用。
以C語言為例,我們需要找到一種方法將格式為XML的數據轉換為JSON格式。一種常見的解決方案是使用C語言中的libxml2庫來解析XML報文,然后將其轉換為C語言中的結構體,最后再將其轉換為JSON格式。
// 從XML報文中獲取數據的函數 static json_t* xml_to_json(xmlDocPtr doc, xmlNodePtr cur) { json_t* json = json_array(); xmlChar* data = NULL; cur = cur->xmlChildrenNode; while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE) { json_t* child = json_object(); xmlChar* id = xmlGetProp(cur, (const xmlChar*)"id"); json_object_set_new(child, "id", json_string((const char*)id)); xmlFree(id); data = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); json_object_set_new(child, "data", json_string((const char*)data)); xmlFree(data); json_array_append_new(json, child); } cur = cur->next; } return json; } // 將XML報文轉換為JSON報文的函數 json_t* xml2json(const char* xml) { LIBXML_TEST_VERSION // 初始化libxml2庫 xmlDocPtr doc = xmlReadMemory(xml, strlen(xml), NULL, NULL, 0); if (doc == NULL) { return NULL; } json_t* json = xml_to_json(doc, xmlDocGetRootElement(doc)); xmlFreeDoc(doc); // 釋放內存空間 xmlCleanupParser(); // 清除資源 return json; }
這里我們使用了libxml2庫中的xmlReadMemory來解析XML報文,然后通過遍歷XML結構來構建JSON對象。這樣我們就可以在C語言中輕松地將XML數據轉換為JSON格式的數據。