色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json解析 xml解析器

錢多多2年前8瀏覽0評論

計算機系統中的數據交換一般會采用特定的數據格式,常見的格式有 JSON 和 XML,它們是數據交換的重要標準格式,支持多種編程語言,非常方便。在 C 語言中,我們有很多解析 JSON 和 XML 的工具,下面簡單介紹兩個常用的解析器。

JSON 解析器

#include <stdio.h>
#include <jansson.h>
int main() {
char *json_string = "{\"name\":\"小明\",\"age\":25,\"skill\":[\"C++\",\"Python\"]}";
json_t *root = NULL;
json_error_t error;
root = json_loads(json_string, 0, &error);
if (!json_is_object(root)) {
printf("Error: parse json string failed\n");
return -1;
}
json_t *name = json_object_get(root, "name");
printf("Name: %s\n", json_string_value(name));
json_t *age = json_object_get(root, "age");
printf("Age: %d\n", json_integer_value(age));
json_t *skill = json_object_get(root, "skill");
if (json_is_array(skill)) {
size_t i;
printf("Skill:");
for (i = 0; i< json_array_size(skill); i++) {
json_t *item = json_array_get(skill, i);
printf(" %s", json_string_value(item));
}
printf("\n");
}
json_decref(root);
return 0;
}

json-c 是一個解析 JSON 格式的開源庫,其 API 簡單易用,使用方便。在代碼中,我們先定義了一個 JSON 格式的字符串json_string,然后通過調用 json_loads() 函數將字符串轉化為 json 對象,然后通過 json_object_get() 函數獲取對象中的屬性值,最后調用 json_decref() 函數釋放 json 對象。

XML 解析器

#include <stdio.h>
#include <libxml/parser.h>    
static void
parse_person(xmlNodePtr node) {
xmlNodePtr cur = NULL;
for (cur = node; cur != NULL; cur = cur->next) {
if (cur->type == XML_ELEMENT_NODE) {
if (xmlStrcmp(cur->name, (const xmlChar *)"name") == 0) {
printf("Name: %s\n", xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1));
}
if (xmlStrcmp(cur->name, (const xmlChar *)"age") == 0) {
printf("Age: %s\n", xmlNodeListGetString(cur->doc, cur->xmlChildrenNode, 1));
}
if (xmlStrcmp(cur->name, (const xmlChar *)"skill") == 0) {
xmlNodePtr skill = NULL;
for (skill = cur->children; skill != NULL; skill = skill->next) {
if (skill->type == XML_ELEMENT_NODE) {
printf("Skill: %s\n",xmlNodeListGetString(skill->doc, skill->xmlChildrenNode, 1));
}
}
}
}
parse_person(cur->children);
}
}
int main() {
xmlDocPtr doc;
xmlNodePtr root_element = NULL;
doc = xmlReadFile("person.xml", NULL, 0);
if (doc == NULL) {
printf("Error: parse xml file failed\n");
return -1;
}
root_element = xmlDocGetRootElement(doc);
if (root_element == NULL) {
printf("Error: get xml root element failed\n");
xmlFreeDoc(doc);
return -1;
}
if (xmlStrcmp(root_element->name, (const xmlChar *) "person")) {
printf("Error: xml root element error\n");
xmlFreeDoc(doc);
return -1;
}
parse_person(root_element);
xmlFreeDoc(doc);
return 0;
}

libxml2 是一個用 C 語言編寫的開源 XML 庫,支持解析和生成 XML 格式的文檔。在代碼中,我們通過調用 xmlReadFile() 函數讀取本地的 person.xml 文件,然后獲取 root 節點,調用 parse_person() 函數遍歷 XML 文檔中的元素,最終釋放內存。