C語言中提供了許多用于XML解析的庫,其中解析JSON對象的庫也不例外。本文介紹一些常用的C語言庫,以及如何使用它們解析JSON對象。
libxml2是一款流行的XML解析庫,同時(shí)也支持JSON解析。它提供了一個(gè)稱為“XPath”的查詢語言,可以方便地訪問JSON對象的屬性。以下是一個(gè)使用libxml2解析JSON對象的例子:
xmlDocPtr doc; xmlNodePtr root, node; xmlChar *json; xmlXPathContextPtr context; xmlXPathObjectPtr result; int size; doc = xmlParseDoc((const xmlChar*)json_str); if (doc == NULL) { // 解析失敗 return; } root = xmlDocGetRootElement(doc); if (root == NULL) { // 解析失敗 xmlFreeDoc(doc); return; } context = xmlXPathNewContext(doc); result = xmlXPathEvalExpression(BAD_CAST "http://json/path/to/property", context); size = xmlXPathNodeSetGetLength(result->nodesetval); for (int i = 0; i< size; i++) { node = xmlXPathNodeSetItem(result->nodesetval, i); // 處理節(jié)點(diǎn) } xmlXPathFreeObject(result); xmlXPathFreeContext(context); xmlFreeDoc(doc);
另一個(gè)流行的C語言JSON解析庫是Jansson。它提供了許多方便的函數(shù),可以輕松地從JSON對象中提取數(shù)據(jù)。以下是一個(gè)使用Jansson解析JSON對象的例子:
json_t *root; json_error_t error; json_t *property; const char *value; root = json_loads(json_str, 0, &error); if (!root) { // 解析失敗 return; } property = json_object_get(root, "path/to/property"); if (!property) { // 沒有找到該屬性 json_decref(root); return; } value = json_string_value(property); // 處理屬性值 json_decref(root);
以上兩個(gè)例子都可以輕松地解析JSON對象,但是具體使用哪一個(gè)庫取決于個(gè)人偏好。