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

c語言遞歸解析json

JSON是一種常用的數(shù)據(jù)格式,可以被許多編程語言解析。在C語言中,我們可以使用遞歸來解析JSON。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <jansson.h>
void parse_json(json_t *root);
int main()
{
json_error_t error;
char *json_string = "{\"name\":\"John\",\"age\":30,\"gender\":\"male\"}";
json_t *root = json_loads(json_string, 0, &error);
if(!root) {
fprintf(stderr, "error: on line %d: %s\n", error.line, error.text);
return 1;
}
parse_json(root);
json_decref(root);
return 0;
}
void parse_json(json_t *root)
{
int i;
switch(json_typeof(root)) {
case JSON_OBJECT:
{
const char *key;
json_t *value;
json_object_foreach(root, key, value) {
printf("Key: %s\n", key);
parse_json(value);
}
break;
}
case JSON_ARRAY:
{
size_t size;
json_t *value;
size = json_array_size(root);
for(i = 0; i < size; i++) {
value = json_array_get(root, i);
parse_json(value);
}
break;
}
case JSON_STRING:
printf("Value: %s\n", json_string_value(root));
break;
case JSON_INTEGER:
printf("Value: %d\n", (int)json_integer_value(root));
break;
case JSON_REAL:
printf("Value: %f\n", json_real_value(root));
break;
case JSON_TRUE:
printf("Value: True\n");
break;
case JSON_FALSE:
printf("Value: False\n");
break;
case JSON_NULL:
printf("Value: Null\n");
break;
}
}

在上面的代碼中,我們使用了json庫(kù)來解析JSON字符串,然后使用parse_json函數(shù)來遞歸解析JSON。這個(gè)函數(shù)將JSON對(duì)象分為對(duì)象、數(shù)組和值三種類型進(jìn)行解析。

在對(duì)象類型中,我們使用json_object_foreach函數(shù)來遍歷對(duì)象中的key-value對(duì)并遞歸解析value。在數(shù)組類型中,我們使用json_array_size和json_array_get函數(shù)來遍歷數(shù)組并遞歸解析每個(gè)元素。在值類型中,我們使用json_typeof函數(shù)來判斷值的類型并進(jìn)行輸出。

使用遞歸來解析JSON能夠大大減小代碼的長(zhǎng)度和復(fù)雜度,也使得代碼更加易讀易懂。