JSON (JavaScript Object Notation) 是一種輕量級的數據交換格式,它基于 JavaScript 語法的子集,但是它是獨立于編程語言和平臺的。在使用 C 語言時,處理 JSON 數據非常常見。C 的 JSON 解析器有很多,但是使用 C 自帶的 JSON 解析器可以幫助減少對第三方庫的依賴。
#include <stdio.h> #include <jansson.h> int main() { json_t *json; json_error_t error; const char *json_str = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; json = json_loads(json_str, 0, &error); if (!json) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return 1; } char *name = json_string_value(json_object_get(json, "name")); int age = json_integer_value(json_object_get(json, "age")); char *city = json_string_value(json_object_get(json, "city")); printf("Name: %s\n", name); printf("Age: %d\n", age); printf("City: %s\n", city); json_decref(json); return 0; }
在這個簡單的例子中,我們可以看到使用 C 自帶的 JSON 解析器非常容易。我們先定義一個指向 json_t 結構的指針,然后定義一個指向字符型常量的指針,并將其作為參數傳遞給 json_loads() 函數,該函數將解析 JSON 字符串并返回一個 json_t 指針。如果出現錯誤,它會設置一個錯誤結構并返回 NULL。
我們可以使用 json_object_get() 函數獲取 JSON 對象的屬性,然后通過 json_string_value() 或 json_integer_value() 函數獲取屬性的值。一旦我們完成了對 json_t 指針的使用,我們必須使用 json_decref() 函數來釋放占用的內存。