在C語(yǔ)言中,處理JSON數(shù)組時(shí),有時(shí)需要將其轉(zhuǎn)換為對(duì)象數(shù)組。下面是一個(gè)簡(jiǎn)單示例,演示如何使用C語(yǔ)言將JSON數(shù)組轉(zhuǎn)換為對(duì)象數(shù)組。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> struct Person{ char *name; int age; }; int main() { char * json_string = "[{\"name\":\"John\", \"age\":20},{\"name\":\"Alice\", \"age\":25},{\"name\":\"Bob\", \"age\":30}]"; json_t *root; json_error_t error; root = json_loads(json_string, 0, &error); if(!root) { fprintf(stderr, "error: in %s: line %d: %s\n", error.source, error.line, error.text); return 1; } size_t array_size = json_array_size(root); struct Person *person_array = malloc(sizeof(struct Person) * array_size); for(size_t i = 0; i < array_size; i++) { json_t *object = json_array_get(root, i); json_t *name = json_object_get(object, "name"); json_t *age = json_object_get(object, "age"); const char * name_str = json_string_value(name); person_array[i].name = malloc(strlen(name_str) + 1); strcpy(person_array[i].name, name_str); person_array[i].age = json_integer_value(age); } // do something with person_array for (size_t i = 0; i < array_size; i++) { free(person_array[i].name); } free(person_array); json_decref(root); return 0; }
以上代碼使用了jansson庫(kù),該庫(kù)提供了對(duì)JSON的解析和生成支持。
在代碼中,首先將JSON字符串加載到一個(gè)json_t對(duì)象中。然后使用json_array_size()函數(shù)獲取數(shù)組大小(即對(duì)象數(shù)量),并為對(duì)象數(shù)組分配內(nèi)存。接下來(lái),使用json_array_get()和json_object_get()函數(shù)獲取JSON對(duì)象的鍵值對(duì)。最后,創(chuàng)建一個(gè)Person結(jié)構(gòu)體來(lái)存儲(chǔ)每個(gè)對(duì)象的name和age。
使用完畢后,釋放內(nèi)存并銷(xiāo)毀JSON對(duì)象。