在C語言編程中,JSON格式的數據處理是一個非常普遍的需求。由于JSON格式的數據比較靈活,可以用來表示各種各樣的數據結構,所以在程序開發中經常會遇到需要將JSON格式的數據轉換成列表的情況。下面將介紹如何用C語言實現JSON轉換成列表。
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <jansson.h> int main() { const char *json_string = "{" "\"name\": \"Tom\"," "\"age\": 25," "\"address\": {" "\"province\": \"Beijing\"," "\"city\": \"Haidian\"" "}," "\"hobbies\": [\"Reading\", \"Traveling\"]" "}"; json_error_t error; json_t *root = json_loads(json_string, 0, &error); if (!root) { printf("json error on line %d: %s\n", error.line, error.text); return 1; } json_t *name = json_object_get(root, "name"); json_t *age = json_object_get(root, "age"); json_t *address = json_object_get(root, "address"); json_t *hobbies = json_object_get(root, "hobbies"); printf("Name: %s\n", json_string_value(name)); printf("Age: %d\n", json_integer_value(age)); if (json_is_object(address)) { json_t *province = json_object_get(address, "province"); json_t *city = json_object_get(address, "city"); printf("Province: %s\n", json_string_value(province)); printf("City: %s\n", json_string_value(city)); } if (json_is_array(hobbies)) { int i; size_t size = json_array_size(hobbies); for (i = 0; i< size; i++) { json_t *hobby = json_array_get(hobbies, i); printf("Hobby %d: %s\n", i+1, json_string_value(hobby)); } } json_decref(root); }
以上代碼可以將一個JSON格式的字符串轉換成一個JSON對象(即列表),并從列表中取出相應的值,包括字符串、整數、對象和數組等等。
C語言中的JSON解析庫有很多,而這里使用的是一個名為“jansson”的開源庫。此庫提供了很多方便的函數來處理JSON格式的數據,比如json_loads和json_object_get等等。使用這些函數可以非常輕松地將一個JSON格式的字符串轉換成一個JSON對象,并從中獲取相應的屬性和值。