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

c json 遞歸對(duì)象拼接

C JSON 遞歸對(duì)象拼接是一種在 C 語(yǔ)言中使用 JSON 格式進(jìn)行數(shù)據(jù)格式化的方法。這種方法通常用于在開(kāi)發(fā)過(guò)程中將數(shù)據(jù)從字符串、文件或其他格式轉(zhuǎn)換為 JSON 字符串。

在使用該方法時(shí),首先需要定義一個(gè)結(jié)構(gòu)體來(lái)存放 JSON 對(duì)象。然后通過(guò)遞歸的方式將所有的子對(duì)象拼接到該結(jié)構(gòu)體中,最終生成完整的 JSON 字符串。

struct json_object{
enum {
JSON_NULL,
JSON_INTEGER,
JSON_DOUBLE,
JSON_BOOL,
JSON_STRING,
JSON_ARRAY,
JSON_OBJECT
} type;
union {
const char* str;
double    dbl;
int64_t   integer;
bool      boolean;
jsonArray_t array;
jsonObject_t object;
} data;
};

上述代碼定義了一個(gè) json_object 結(jié)構(gòu)體,其中包含了 JSON 對(duì)象的各個(gè)元素類型。包括:null、integer、double、bool、string、array 和 object。

遞歸對(duì)象拼接的方式是使用一個(gè) void 類型的函數(shù)遞歸地遍歷從非 C JSON 數(shù)據(jù)中獲取到的 JSON 對(duì)象。在該函數(shù)中,使用一個(gè) switch 語(yǔ)句來(lái)判斷每個(gè)元素的類型,并將其拼接到結(jié)構(gòu)體的 data 成員中。同時(shí),如果元素是一個(gè)數(shù)組或?qū)ο螅瑒t使用遞歸方式將其子元素拼接到結(jié)構(gòu)體中。

void json_parse_object(struct json_stream* parser, struct json_object* object){
json_next_token(parser);
while (parser->token != TOKEN_RIGHT_BRACE && parser->token != TOKEN_EOF){
char* key = json_parse_key(parser);
json_expect_token(parser, TOKEN_COLON);
switch (parser->token){
case TOKEN_NULL:{
object_set_null(object, key);
json_next_token(parser);
break;
}
case TOKEN_INTEGER:{
int64_t integer;
json_parse_integer(parser, &integer);
object_set_integer(object, key, integer);
break;
}
case TOKEN_FLOAT:{
double dbl;
json_parse_number(parser, &dbl);
object_set_double(object, key, dbl);
break;
}
case TOKEN_TRUE:{
object_set_boolean(object, key, true);
json_next_token(parser);
break;
}
case TOKEN_FALSE:{
object_set_boolean(object, key, false);
json_next_token(parser);
break;
}
case TOKEN_STRING:{
char* str = json_parse_string(parser);
object_set_string(object, key, str);
break;
}
case TOKEN_LEFT_BRACE:{
jsonObject_t child = new_object();
json_parse_object(parser, &child);
object_set_object(object, key, child);
break;
}
case TOKEN_LEFT_BRACKET:{
jsonArray_t arr = new_array();
json_parse_array(parser, arr);
object_set_array(object, key, arr);
break;
}
default:
break;
}
}
}

通過(guò)以上的遞歸方式,我們可以非常方便地將從不同的來(lái)源獲取的 JSON 數(shù)據(jù)轉(zhuǎn)換成我們需要的格式。