在C語言中,如果我們想要處理JSON字符串數組,我們可以使用C List。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <jansson.h> typedef struct { char *name; char *email; } Person; Person *person_new(char *json) { json_t *root; json_error_t error; root = json_loads(json, 0, &error); if(!root) { fprintf(stderr, "error: on line %d: %s\n", error.line, error.text); return NULL; } Person *person = malloc(sizeof(Person)); person->name = strdup(json_string_value(json_object_get(root, "name"))); person->email = strdup(json_string_value(json_object_get(root, "email"))); json_decref(root); return person; } void person_free(Person *person) { if(person) { free(person->name); free(person->email); free(person); } } void list_free(void *data) { person_free((Person *)data); } int main() { list_t *list = list_new(list_free); list_node_t *node; char *json; json = "{\"name\":\"John Smith\",\"email\":\"john@example.com\"}"; node = list_rpush(list, list_node_new(person_new(json))); json = "{\"name\":\"Jane Doe\",\"email\":\"jane@example.com\"}"; node = list_rpush(list, list_node_new(person_new(json))); node = list_head(list); while(node) { Person *person = node->val; printf("%s <%s>\n", person->name, person->email); node = node->next; } list_destroy(list); return 0; }
首先,我們定義了一個Person結構體,表示一個人。然后,我們定義了person_new函數,將JSON字符串轉化為Person對象。person_new函數使用了json_loads函數來解析JSON字符串,然后根據JSON中的字段創建了一個Person對象。最后,我們使用json_decref函數釋放了JSON對象。我們還定義了一個person_free函數來釋放Person對象。
在main函數中,我們創建了一個list_t對象,然后向其中添加兩個Person對象。我們通過list_rpush函數將每個Person對象添加到list_t對象中。我們還定義了一個list_node_t對象來迭代list_t對象。我們使用了list_head函數來獲取list_t對象的第一個節點,然后使用while循環來迭代每個節點。我們獲取了每個節點的值,并輸出Person對象的名字和電子郵件地址。
最后,我們使用list_destroy函數來釋放list_t對象。這個函數也會調用我們為其定義的list_free函數來釋放每個節點的值。