在C語言開發(fā)中,Json和Xml都是常見的數(shù)據(jù)傳輸格式,Json在web應(yīng)用中更流行,而Xml則在系統(tǒng)開發(fā)中更常用。在某些場(chǎng)景下,我們需要把Json格式的數(shù)據(jù)轉(zhuǎn)換為Xml格式,這時(shí)就需要編寫C語言代碼來完成這個(gè)轉(zhuǎn)換操作。
要實(shí)現(xiàn)這個(gè)轉(zhuǎn)換操作,我們可以使用第三方的庫,比如libxml2庫。以下是一個(gè)簡單的例子,使用C代碼將Json格式的數(shù)據(jù)轉(zhuǎn)換成Xml格式,并保存為文件。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <libxml/encoding.h>
#include <libxml/xmlwriter.h>
#include <jansson.h>
int main()
{
const char *json_str = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
json_error_t json_error;
json_t *json_root = json_loads(json_str, 0, &json_error);
xmlTextWriterPtr writer = xmlNewTextWriterFilename("output.xml", 0);
xmlTextWriterStartDocument(writer, NULL, "UTF-8", NULL);
xmlTextWriterStartElement(writer, BAD_CAST "root");
const char *key;
json_t *value;
json_object_foreach(json_root, key, value) {
if(json_is_string(value)) {
xmlTextWriterWriteElement(writer, BAD_CAST key, BAD_CAST json_string_value(value));
} else if(json_is_integer(value)) {
char value_str[32];
snprintf(value_str, sizeof(value_str), "%lld", json_integer_value(value));
xmlTextWriterWriteElement(writer, BAD_CAST key, BAD_CAST value_str);
}
}
xmlTextWriterEndElement(writer); /* close root tag */
xmlTextWriterEndDocument(writer);
xmlFreeTextWriter(writer);
return 0;
}
以上代碼使用了libxml2庫來生成xml文件,通過json_loads()函數(shù)將Json格式的字符串轉(zhuǎn)換成Json對(duì)象,然后使用json_object_foreach()函數(shù)遍歷對(duì)象,生成XML文檔。
需要注意的是,這里只演示了將Json對(duì)象中的字符串和數(shù)字轉(zhuǎn)換成XML元素的例子,如有其他需求,可以根據(jù)具體情況進(jìn)行相應(yīng)的修改實(shí)現(xiàn)。