色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 遍歷讀取json數據結構

夏志豪1年前8瀏覽0評論

在程序開發中,json數據結構是一種常見的數據傳遞和存儲格式。如果我們需要從一個json文件中讀取數據或者從一個json字符串中解析數據,就需要使用c語言遍歷讀取json數據結構,并將其轉化為c語言的數據形式。下面就介紹一下如何使用c語言來遍歷讀取json數據結構。

#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內容
json_error_t error;
json_t *root = json_loadf(fp, 0, &error);
fclose(fp);
//遍歷json內容
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內存
json_decref(root);
return 0;
}

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

以上就是使用c語言遍歷讀取json數據結構的方法。需要注意的是,在使用完json_t對象后必須釋放內存,否則會導致內存泄漏。