C語言是一種廣泛應用于嵌入式系統領域的編程語言,其強大的數據處理能力和高效的執行速度,使得它成為了很多開發者的首選語言。而在實際開發中,我們往往需要將XML文件轉換為JSON格式,以方便數據的處理和傳輸。下面,我們就來介紹一下C語言中將XML文件轉換為JSON格式的方法。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #include <libxml/parser.h> #include <libxml/tree.h> #include <jansson.h> static void xml2json(xmlDocPtr doc, json_t *json_obj); static void xml_getnode(xmlDocPtr doc, xmlNodePtr cur, json_t *json_obj); int main() { xmlDocPtr doc = xmlParseFile("sample.xml"); if (doc == NULL) { fprintf(stderr, "Failed to parse XML\n"); return 1; } json_t *json_obj = json_object(); xml2json(doc, json_obj); char *json_str = json_dumps(json_obj, JSON_INDENT(4)); printf("%s\n", json_str); xmlFreeDoc(doc); free(json_str); json_decref(json_obj); return 0; } static void xml2json(xmlDocPtr doc, json_t *json_obj) { xmlNodePtr root = xmlDocGetRootElement(doc); if (root == NULL) { return; } xml_getnode(doc, root, json_obj); } static void xml_getnode(xmlDocPtr doc, xmlNodePtr cur, json_t *json_obj) { while (cur != NULL) { if (cur->type == XML_ELEMENT_NODE && cur->children != NULL) { json_t *new_obj = json_object(); xml_getnode(doc, cur->children, new_obj); char *key = (char *)cur->name; json_t *old_obj = json_object_get(json_obj, key); if (old_obj == NULL) { json_object_set_new(json_obj, key, new_obj); } else if (json_is_array(old_obj)) { json_array_append(old_obj, new_obj); } else { json_t *array = json_array(); json_array_append(array, old_obj); json_array_append(array, new_obj); json_object_set(json_obj, key, array); } } else if (cur->type == XML_TEXT_NODE && cur->content != NULL) { char *value = (char *)cur->content; json_array_append(json_obj, json_string(value)); } cur = cur->next; } }
以上就是將XML文件轉換為JSON格式的示例代碼,通過使用libxml和jansson這兩個常用的庫,我們可以在C語言中輕松完成這一轉換,并方便地進行數據處理和傳輸。