C中的JSON(JavaScript Object Notation)包是一個非常流行的解析JSON數據格式的工具包。它提供了簡潔的API和易于使用的方法來解析JSON并從中提取數據。使用該包可以讀取和寫入JSON數據,它提供了許多API函數,包括處理JSON對象、數組和值的函數,以及將JSON字符串轉換為C數據結構的函數。
#include <stdio.h> #include <jansson.h> int main() { const char *json_string = "{\"name\":\"John\", \"age\": 25, \"city\": \"New York\"}"; json_t *root; json_error_t error; root = json_loads(json_string, 0, &error); const char *name = json_string_value(json_object_get(root, "name")); int age = json_integer_value(json_object_get(root, "age")); const char *city = json_string_value(json_object_get(root, "city")); printf("Name: %s\n", name); printf("Age: %d\n", age); printf("City: %s\n", city); json_decref(root); return 0; }
以上代碼展示了如何使用JSON包從JSON字符串中提取數據。在這個例子中,我們使用json_loads()函數將JSON字符串加載到json_t結構體中。然后,通過json_string_value()和json_integer_value()函數,我們從JSON對象中獲取數據并將其轉換為C數據類型,最后將其打印出來。最后需要使用json_decref()函數釋放root對象的內存以避免內存泄漏。
如果你想從文件中讀取JSON數據,你可以使用json_load_file()函數代替json_loads()函數來加載JSON數據:
json_t *root; json_error_t error; root = json_load_file("data.json", 0, &error); /* 處理JSON數據 */ /* ... */ json_decref(root);
使用JSON包還可以輕松地將C數據結構轉換為JSON字符串。例如,以下代碼將C結構體轉換為JSON字符串:
typedef struct { const char *name; int age; const char *city; } person_t; person_t person = { "John", 25, "New York" }; json_t *root; root = json_pack("{s:s, s:i, s:s}", "name", person.name, "age", person.age, "city", person.city); char *json_string; json_string = json_dumps(root, JSON_INDENT(4)); printf("%s\n", json_string); free(json_string); json_decref(root);
這里我們定義了一個person_t結構體,使用json_pack()函數將結構體轉換為JSON對象。我們可以稍微調整json_pack()函數的參數以創建JSON數組。最后,使用json_dumps()函數將JSON對象轉換為JSON字符串。我們還可以使用JSON_INDENT()宏指定縮進級別。
結合C語言的強大功能和JSON包的易用性,可以輕松地在項目中處理JSON數據。我們強烈推薦使用JSON包來解析和處理JSON數據。