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

c 解析嵌套json

錢諍諍1年前7瀏覽0評論

在C語言中解析嵌套JSON數據可能會比較困難。但是,通過使用現成的JSON庫和遞歸解析的技巧,可以輕松地解析出復雜的JSON數據。

#include <stdio.h>
#include <jansson.h>
void print_json(json_t *root, int indent);
void print_value(json_t *root, int indent)
{
switch (json_typeof(root)) {
case JSON_OBJECT:  // 處理JSON對象
print_json(root, indent);
break;
case JSON_ARRAY:  // 處理JSON數組
for (size_t i = 0; i < json_array_size(root); i++) {
print_value(json_array_get(root, i), indent + 1);
}
break;
default:  // 處理JSON值
printf("%*s", indent * 2, "");  // 打印縮進
switch (json_typeof(root)) {
case JSON_STRING:
printf("string: %s\n", json_string_value(root));
break;
case JSON_INTEGER:
printf("integer: %lld\n", json_integer_value(root));
break;
case JSON_REAL:
printf("real: %f\n", json_real_value(root));
break;
case JSON_TRUE:
printf("true\n");
break;
case JSON_FALSE:
printf("false\n");
break;
case JSON_NULL:
printf("null\n");
break;
default:
break;
}
break;
}
}
void print_json(json_t *root, int indent)
{
printf("%*s{\n", indent * 2, "");
const char *key;
json_t *value;
json_object_foreach(root, key, value) {  // 遍歷JSON對象
printf("%*s%s: ", indent * 2, "", key);
print_value(value, indent + 1);
}
printf("%*s}\n", indent * 2, "");
}
int main()
{
const char *json_str =
"{\"name\":\"小明\",\"age\":18,\"friends\":[{\"name\":\"小紅\",\"age\":17},"
"{\"name\":\"小蘭\",\"age\":18}],\"score\":{\"math\":90,\"english\":85}}";
json_t *root;
json_error_t error;
root = json_loads(json_str, 0, &error);  // 加載JSON字符串
print_json(root, 0);  // 打印JSON對象
json_decref(root);  // 釋放JSON對象
return 0;
}

在上面的代碼中,我們使用了jansson庫來解析JSON數據。我們定義了兩個函數:print_value和print_json。函數print_value用于處理JSON值,而函數print_json用于處理JSON對象。在print_json函數中,我們使用了json_object_foreach來遍歷JSON對象中的所有鍵值對,并調用print_value函數來遞歸地解析JSON數據。

在main函數中,我們定義了一個JSON字符串,并使用json_loads函數將其加載為JSON對象。然后,我們使用print_json函數打印JSON對象,并最后釋放JSON對象。

下一篇vue2.0+jqgrid