C JSON 串是一種用于存儲和交換數據的格式,它以簡潔的形式表示復雜的數據結構。在處理 JSON 串時,我們常常需要從中提取特定的數據,這就需要用到 JSON 解析器。本篇文章將介紹如何使用 C 語言解析 JSON 串并取值。
#include <stdio.h> #include <jansson.h> int main() { char * json_string = "{ \"name\": \"Alice\", \"age\": 25, \"children\": [\"Bob\", \"Charlie\", \"David\"] }"; json_error_t error; json_t * root = json_loads(json_string, 0, &error); if (root == NULL) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return 1; } json_t * name = json_object_get(root, "name"); const char * name_value = json_string_value(name); json_t * age = json_object_get(root, "age"); int age_value = json_integer_value(age); json_t * children = json_object_get(root, "children"); size_t i; json_t * child; const char * child_value; printf("Name: %s\nAge: %d\nChildren:\n", name_value, age_value); json_array_foreach(children, i, child) { child_value = json_string_value(child); printf(" %s\n", child_value); } json_decref(root); return 0; }
上述代碼通過 jansson 庫提供的函數實現了對 JSON 串的解析和取值。首先通過 json_loads 函數將 JSON 串解析成一個 json_t 類型的數據結構,然后使用 json_object_get 函數從根節點中獲取指定名稱的子節點。對于字符串類型的節點,可以使用 json_string_value 函數獲取其值;對于整數類型的節點,可以使用 json_integer_value 函數獲取其值。如果節點是數組類型的,可以使用 json_array_foreach 函數遍歷數組并獲取其中的元素值。最后使用 json_decref 函數釋放數據結構,以防止內存泄漏。