在C語(yǔ)言中,JSON對(duì)象是一種非常常見(jiàn)的數(shù)據(jù)類型。在實(shí)際應(yīng)用中,經(jīng)常需要將JSON對(duì)象轉(zhuǎn)換成數(shù)組來(lái)方便處理數(shù)據(jù)。下面就來(lái)介紹一下如何實(shí)現(xiàn)C語(yǔ)言中JSON對(duì)象轉(zhuǎn)換成數(shù)組的方法。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <jansson.h>int main() { char *json_str = "{\"name\":\"張三\",\"age\":18,\"score\":[80,90,100]}"; json_error_t error; json_t *root = json_loads(json_str, 0, &error); if (!root) { printf("json_loads error, line %d: %s\n", error.line, error.text); return -1; } json_t *scores = json_object_get(root, "score"); if (!json_is_array(scores)) { printf("score is not a json array\n"); return -1; } int size = json_array_size(scores); int *arr = (int *)malloc(sizeof(int) * size); if (!arr) { printf("malloc error\n"); return -1; } int i; for (i = 0; i< size; i++) { json_t *score = json_array_get(scores, i); arr[i] = json_integer_value(score); } for (i = 0; i< size; i++) { printf("%d ", arr[i]); } printf("\n"); free(arr); json_decref(root); return 0; }
上面的代碼中,我們首先定義一個(gè)JSON字符串“json_str”,其中包含了一個(gè)名為“score”的數(shù)組,數(shù)組中含有三個(gè)元素。接著我們使用json_loads函數(shù)將這個(gè)字符串轉(zhuǎn)換成json_t類型的根節(jié)點(diǎn)——root。然后我們使用json_object_get函數(shù)從根節(jié)點(diǎn)中獲取名為“score”的JSON對(duì)象。如果這個(gè)JSON對(duì)象不是數(shù)組類型,我們就直接退出程序。接著,我們使用json_array_size函數(shù)獲取數(shù)組的大小,并動(dòng)態(tài)申請(qǐng)一塊相應(yīng)大小的內(nèi)存用來(lái)存儲(chǔ)數(shù)組。最后,我們使用json_array_get函數(shù)以及json_integer_value函數(shù)逐個(gè)遍歷數(shù)組中的元素,并將其轉(zhuǎn)成int型存入之前申請(qǐng)好的數(shù)組中。在程序的最后,我們依次輸出這個(gè)數(shù)組的所有元素,并釋放掉申請(qǐng)的內(nèi)存空間。