欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 遍歷讀取json數(shù)據(jù)結(jié)構(gòu)

在程序開(kāi)發(fā)中,json數(shù)據(jù)結(jié)構(gòu)是一種常見(jiàn)的數(shù)據(jù)傳遞和存儲(chǔ)格式。如果我們需要從一個(gè)json文件中讀取數(shù)據(jù)或者從一個(gè)json字符串中解析數(shù)據(jù),就需要使用c語(yǔ)言遍歷讀取json數(shù)據(jù)結(jié)構(gòu),并將其轉(zhuǎn)化為c語(yǔ)言的數(shù)據(jù)形式。下面就介紹一下如何使用c語(yǔ)言來(lái)遍歷讀取json數(shù)據(jù)結(jié)構(gòu)。

#include <stdio.h>
#include <jansson.h>
int main() {
// 讀取json文件
FILE *fp = fopen("data.json", "r");
if (!fp) {
perror("Error in opening file");
return -1;
}
//解析json內(nèi)容
json_error_t error;
json_t *root = json_loadf(fp, 0, &error);
fclose(fp);
//遍歷json內(nèi)容
if (json_is_object(root)) {
const char *key;
json_t *value;
json_object_foreach(root, key, value) {
if (json_is_string(value)) {
printf("key: %s, value: %s\n", key, json_string_value(value));
} else if (json_is_integer(value)) {
printf("key: %s, value: %d\n", key, json_integer_value(value));
} else if (json_is_array(value)) {
printf("key: %s\n", key);
int size = json_array_size(value);
for (int i=0; i< size; i++) {
json_t *element = json_array_get(value, i);
if (json_is_object(element)) {
const char *subKey;
json_t *subValue;
json_object_foreach(element, subKey, subValue) {
if (json_is_string(subValue)) {
printf("\t\tkey: %s, value: %s\n", subKey, json_string_value(subValue));
} else if (json_is_integer(subValue)) {
printf("\t\tkey: %s, value: %d\n", subKey, json_integer_value(subValue));
}
}
}
}
}
}
}
//釋放json_t內(nèi)存
json_decref(root);
return 0;
}

在上面的程序中,我們首先打開(kāi)json文件,然后使用json_loadf函數(shù)解析json內(nèi)容,得到一個(gè)json_t類(lèi)型的root對(duì)象。接著使用json_is_object判斷root是不是json對(duì)象,如果是json對(duì)象就遍歷對(duì)象內(nèi)容,根據(jù)不同類(lèi)型(字符串、整數(shù)、數(shù)組、嵌套對(duì)象)輸出對(duì)應(yīng)的值。

以上就是使用c語(yǔ)言遍歷讀取json數(shù)據(jù)結(jié)構(gòu)的方法。需要注意的是,在使用完json_t對(duì)象后必須釋放內(nèi)存,否則會(huì)導(dǎo)致內(nèi)存泄漏。