JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,它易于閱讀和編寫,并且易于解析和生成。在C語(yǔ)言中,我們使用JSON解析器來(lái)將JSON數(shù)據(jù)轉(zhuǎn)換為C語(yǔ)言數(shù)據(jù)類型。在本文中,我們將討論如何將JSON轉(zhuǎn)換為數(shù)組。
在C語(yǔ)言中,我們可以使用第三方JSON解析器庫(kù)來(lái)解析JSON數(shù)據(jù)。其中,JSON-C和jansson都是常見的C語(yǔ)言JSON解析器庫(kù)。在這里,我們將使用JSON-C來(lái)解析JSON數(shù)據(jù)。
#include <stdio.h>
#include <stdlib.h>
#include <json-c/json.h>
int main() {
char *json_string = "{ \"numbers\": [1, 2, 3, 4, 5] }";
struct json_object *json_obj = json_tokener_parse(json_string);
if (json_obj == NULL) {
printf("JSON parsing failed!\n");
return 1;
}
struct json_object *numbers_obj;
json_object_object_get_ex(json_obj, "numbers", &numbers_obj);
enum json_type type = json_object_get_type(numbers_obj);
if (type != json_type_array) {
printf("Not a JSON array!\n");
return 1;
}
int array_len = json_object_array_length(numbers_obj);
int *array = malloc(array_len * sizeof(int));
for (int i = 0; i < array_len; i++) {
struct json_object *number_obj = json_object_array_get_idx(numbers_obj, i);
int number = json_object_get_int(number_obj);
array[i] = number;
}
for (int i = 0; i < array_len; i++) {
printf("%d ", array[i]);
}
printf("\n");
free(array);
json_object_put(json_obj);
return 0;
}
在上面的代碼中,我們首先定義了一個(gè)JSON字符串,其中包含一個(gè)名為“numbers”的數(shù)組。之后,我們使用json_tokener_parse函數(shù)將JSON字符串解析為json_object對(duì)象,并使用json_object_object_get_ex函數(shù)獲取該對(duì)象中名為“numbers”的元素。我們還使用json_object_get_type函數(shù)檢查該元素是否是一個(gè)JSON數(shù)組。
在檢查完元素類型之后,我們使用json_object_array_length函數(shù)獲取數(shù)組長(zhǎng)度,并使用malloc函數(shù)動(dòng)態(tài)分配一個(gè)整數(shù)數(shù)組。在循環(huán)中,我們使用json_object_array_get_idx函數(shù)獲取數(shù)組中的每個(gè)數(shù),并使用json_object_get_int函數(shù)將其轉(zhuǎn)換為C語(yǔ)言中的整數(shù)類型。最后,我們使用printf函數(shù)輸出數(shù)組中的所有數(shù)字。
最后,我們釋放動(dòng)態(tài)分配的數(shù)組和json_object對(duì)象。