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

c 將 json 轉(zhuǎn)成xml

在c語(yǔ)言程序中,將json格式數(shù)據(jù)轉(zhuǎn)換為xml格式數(shù)據(jù)是一個(gè)普遍的任務(wù)。為此,我們可以使用一些開(kāi)源json解析庫(kù),比如

接著,我們需要?jiǎng)?chuàng)建一個(gè)cJSON對(duì)象,使用cJSON_Parse()函數(shù)將json格式數(shù)據(jù)解析為cJSON對(duì)象:

char *json_data = "{\"name\":\"Tom\", \"age\":18}";
cJSON *json_object = cJSON_Parse(json_data);

經(jīng)過(guò)解析后,我們可以得到一個(gè)cJSON對(duì)象,其中包含了json數(shù)據(jù)的各個(gè)屬性和值。接下來(lái),我們需要將cJSON對(duì)象轉(zhuǎn)換為xml格式數(shù)據(jù)。

在轉(zhuǎn)換之前,我們需要先自定義xml的格式,比如:

<person>
<name>Tom</name>
<age>18</age>
</person>

接著,我們可以使用遞歸的方式,遍歷cJSON對(duì)象并將其轉(zhuǎn)換為xml:

void json_to_xml(cJSON *json_object, xmlDocPtr doc, xmlNodePtr node)
{
xmlNodePtr child_node;
xmlNodePtr sub_child_node;
cJSON *item;
cJSON_ArrayForEach(item, json_object)
{
child_node = xmlNewChild(node, NULL, BAD_CAST item->string, NULL);
if(item->type == cJSON_String)
{
xmlNodeSetContent(child_node, BAD_CAST item->valuestring);
}
else if(item->type == cJSON_Number)
{
char str_value[64];
sprintf(str_value, "%d", item->valueint);
xmlNodeSetContent(child_node, BAD_CAST str_value);
}
else if(item->type == cJSON_Array)
{
cJSON *sub_item;
cJSON_ArrayForEach(sub_item, item)
{
sub_child_node = xmlNewChild(child_node, NULL, BAD_CAST item->string, NULL);
json_to_xml(sub_item, doc, sub_child_node);
}
}
else if(item->type == cJSON_Object)
{
json_to_xml(item, doc, child_node);
}
}
}

使用xmlNewChild函數(shù)創(chuàng)建一個(gè)新的子節(jié)點(diǎn),并使用xmlNodeSetContent函數(shù)將內(nèi)容設(shè)置為相應(yīng)的json屬性值。如果屬性類型為數(shù)組或?qū)ο螅覀冃枰褂眠f歸的方式處理。

最后,我們可以調(diào)用上述函數(shù)將cJSON對(duì)象轉(zhuǎn)換為xml,代碼如下:

xmlDocPtr doc = xmlNewDoc(BAD_CAST "1.0");
xmlNodePtr root_node = xmlNewNode(NULL, BAD_CAST "root");
xmlDocSetRootElement(doc, root_node);
json_to_xml(json_object, doc, root_node);

經(jīng)過(guò)上述步驟,我們就成功將json格式數(shù)據(jù)轉(zhuǎn)換為xml格式數(shù)據(jù)。