在C語言開發過程中,處理JSON數據是必不可少的一部分。JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,常用于客戶端和服務器之間的數據傳輸。C語言的JSON解析器為程序員提供了一個處理JSON數據的便利。JSON數據的最大特點是弱類型,因此在C語言中解析JSON數據的過程也需要特別關注弱類型數據的處理。
#include <stdio.h> #include <string.h> #include <jansson.h> int main() { char *json_str = "{\"name\":\"Tom\",\"age\":28,\"is_student\":true}"; json_error_t error; json_t *root = json_loads(json_str, 0, &error); if (!root) { printf("JSON解析失敗:%s\n", error.text); return -1; } json_t *name_node = json_object_get(root, "name"); if (json_is_string(name_node)) { const char *name = json_string_value(name_node); printf("姓名:%s\n", name); } json_t *age_node = json_object_get(root, "age"); if (json_is_integer(age_node)) { int age = (int)json_integer_value(age_node); printf("年齡:%d\n", age); } json_t *student_node = json_object_get(root, "is_student"); if (json_is_boolean(student_node)) { int is_student = (int)json_boolean_value(student_node); printf("是否學生:%s\n", is_student ? "是" : "否"); } json_decref(root); return 0; }
C語言的JSON解析器使用了一系列的json_t類型來表示JSON數據。其中,json_is_xxx()宏用于對json_t對象的類型進行判斷。因為JSON數據是弱類型的,所以解析器無法自動識別JSON中的數據類型,只能依靠程序員手動判斷。
在上述代碼中,我們使用json_is_string()函數來判斷"name"字段的值是否為字符串類型;使用json_is_integer()函數來判斷"age"字段的值是否為整型類型;使用json_is_boolean()函數來判斷"is_student"字段的值是否為布爾類型。對于不同的數據類型,解析器提供了多個數據類型轉換函數,如json_integer_value()、json_boolean_value()等。
在程序運行結束后,我們還需要使用json_decref()函數來釋放解析器在解析JSON數據時所引用的內存。