c json轉對象數組是一個常見的操作。在C語言中,可以使用第三方庫來實現這個功能。其中一個常用的庫就是jansson。
使用jansson庫中的函數`json_loads()`可以實現將json字符串轉換成相應的jansson對象,然后使用`json_array_size()`函數獲取數組長度,再使用`json_array_get()`函數獲取數組元素,最后使用`json_object_get()`獲取對象屬性。
/* json字符串 */ const char *json_str = "[" " {" " \"name\": \"John\"," " \"age\": 30," " \"city\": \"New York\"" " }," " {" " \"name\": \"Mary\"," " \"age\": 25," " \"city\": \"Los Angeles\"" " }" "]"; json_error_t error; /* 錯誤信息 */ /* 將json字符串轉換成jansson對象 */ json_t *root = json_loads(json_str, 0, &error); /* 判斷對象是否是jansson數組 */ if (!json_is_array(root)) { printf("Error: json is not an array\n"); return; } /* 獲取數組長度 */ size_t array_size = json_array_size(root); /* 遍歷數組 */ for (int i = 0; i< array_size; ++i) { /* 獲取數組元素 */ json_t *element = json_array_get(root, i); /* 判斷元素是否是jansson對象 */ if (!json_is_object(element)) { printf("Error: element %d is not an object\n", i); continue; } /* 獲取對象屬性 */ json_t *name = json_object_get(element, "name"); json_t *age = json_object_get(element, "age"); json_t *city = json_object_get(element, "city"); /* 打印對象屬性值 */ if (json_is_string(name)) { printf("name: %s\n", json_string_value(name)); } if (json_is_integer(age)) { printf("age: %ld\n", json_integer_value(age)); } if (json_is_string(city)) { printf("city: %s\n", json_string_value(city)); } } /* 釋放jansson對象 */ json_decref(root);
使用jansson庫可以方便地實現C json轉對象數組的功能。需要注意的是,使用jansson庫的時候需要特別注意內存管理,不使用的jansson對象一定要及時釋放。