欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c json轉(zhuǎn)換成xml

劉柏宏2年前8瀏覽0評論

JSON和XML是兩種常見的數(shù)據(jù)交換格式,它們在不同的應(yīng)用場景中發(fā)揮著重要的作用。在一些需要將JSON數(shù)據(jù)轉(zhuǎn)換為XML格式的應(yīng)用中,我們可以使用C語言中的第三方庫進(jìn)行轉(zhuǎn)換。

#include <stdio.h>
#include <cJSON.h>
#include <libxml/parser.h>
#include <libxml/tree.h>
xmlNodePtr cJSON_to_xml(cJSON *root) {
xmlNodePtr node = NULL;
switch (root->type) {
case cJSON_Object: {
node = xmlNewNode(NULL, BAD_CAST "object");
cJSON *child = root->child;
while (child) {
xmlNodePtr child_node = cJSON_to_xml(child);
xmlAddChild(node, child_node);
child = child->next;
}
break;
}
case cJSON_Array: {
node = xmlNewNode(NULL, BAD_CAST "array");
cJSON *child = root->child;
while (child) {
xmlNodePtr child_node = cJSON_to_xml(child);
xmlAddChild(node, child_node);
child = child->next;
}
break;
}
case cJSON_Number: {
node = xmlNewNode(NULL, BAD_CAST "number");
char str[32];
snprintf(str, 32, "%f", root->valuedouble);
xmlNodeSetContent(node, BAD_CAST str);
break;
}
case cJSON_String: {
node = xmlNewNode(NULL, BAD_CAST "string");
xmlNodeSetContent(node, BAD_CAST root->valuestring);
break;
}
case cJSON_True:
case cJSON_False: {
node = xmlNewNode(NULL, BAD_CAST "boolean");
xmlNodeSetContent(node, BAD_CAST (root->type == cJSON_True) ? "true" : "false");
break;
}
default:
break;
}
return node;
}
int main(int argc, char **argv) {
char *json_str = "{\"name\":\"張三\",\"age\":18,\"gender\":\"男\(zhòng)",\"hobbies\":[\"籃球\",\"游戲\"]}";
cJSON *root = cJSON_Parse(json_str);
if (root) {
xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr root_node = cJSON_to_xml(root);
xmlDocSetRootElement(doc, root_node);
xmlSaveFormatFileEnc("output.xml", doc, "UTF-8", 1);
xmlFreeDoc(doc);
}
cJSON_Delete(root);
return 0;
}

上述代碼使用了兩個第三方庫,cJSON和libxml。首先解析JSON字符串,獲取根節(jié)點后,通過遞歸方式將JSON對象和數(shù)組轉(zhuǎn)換為XML節(jié)點。XML結(jié)果保存到內(nèi)存中,最后通過xmlSaveFormatFileEnc函數(shù)保存到文件中。

以上是一個簡單的C語言JSON轉(zhuǎn)XML的實例。你可以根據(jù)需要擴(kuò)展該代碼,完成更復(fù)雜的JSON格式轉(zhuǎn)換工作。