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

c 生成樹形json數(shù)據(jù)結(jié)構(gòu)

錢琪琛1年前9瀏覽0評論

在現(xiàn)如今的互聯(lián)網(wǎng)時代,JSON已經(jīng)逐漸成為數(shù)據(jù)交換的標(biāo)準(zhǔn)格式。生成JSON數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)傳輸?shù)幕A(chǔ),而生成樹形JSON數(shù)據(jù)結(jié)構(gòu)則更能方便地展示信息。

在C語言中,可以采用遞歸的方式生成樹形JSON數(shù)據(jù)結(jié)構(gòu)。下面是一份示例代碼:

#include// 定義節(jié)點結(jié)構(gòu)體,包含節(jié)點名、節(jié)點類型和子節(jié)點指針
typedef struct node {
char *name;
int type;
struct node *child;
} node;
node* create_node(char *name, int type);
void add_child(node *parent, node *child);
char* generate_json(node *root);
// 創(chuàng)建一個節(jié)點
node* create_node(char *name, int type) {
node *new_node = (node*)malloc(sizeof(node));
new_node->name = name;
new_node->type = type;
new_node->child = NULL;
return new_node;
}
// 為某個節(jié)點添加子節(jié)點
void add_child(node *parent, node *child) {
node *curr = parent->child;
if (curr == NULL) {
parent->child = child;
} else {
while (curr->child != NULL) {
curr = curr->child;
}
curr->child = child;
}
}
// 遞歸生成樹形JSON數(shù)據(jù)結(jié)構(gòu)
char* generate_json(node *root) {
char *json = (char*)malloc(sizeof(char)*512);
char *temp = NULL;
switch (root->type) {
case 0:
sprintf(json, "{\"%s\":{", root->name);
break;
case 1:
sprintf(json, "\"%s\":[", root->name);
break;
case 2:
sprintf(json, "{\"%s\":\"%s\"}", root->name, root->child->name);
return json;
}
node *child = root->child;
while (child != NULL) {
temp = generate_json(child);
strcat(json, temp);
if (child->child != NULL) {
strcat(json, ",");
}
child = child->child;
}
if (root->type == 1) {
strcat(json, "]");
}
strcat(json, "}");
return json;
}
int main() {
node *root = create_node("root", 0);
node *node1 = create_node("node1", 0);
node *node2 = create_node("node2", 1);
node *node2_child1 = create_node("node2_child1", 2);
node *node2_child2 = create_node("node2_child2", 2);
node *node3 = create_node("node3", 0);
add_child(root, node1);
add_child(root, node2);
add_child(root, node3);
add_child(node2, node2_child1);
add_child(node2, node2_child2);
char *json = generate_json(root);
printf("%s", json);
free(root);
free(node1);
free(node2);
free(node2_child1);
free(node2_child2);
free(node3);
free(json);
return 0;
}

代碼中定義了一個節(jié)點結(jié)構(gòu)體,包含節(jié)點名、節(jié)點類型(0代表對象,1代表數(shù)組,2代表字符串)和子節(jié)點指針。程序通過遞歸方式遍歷節(jié)點,生成對應(yīng)的JSON字符串。

生成樹形JSON數(shù)據(jù)結(jié)構(gòu)在C語言中可以采用遞歸方式實現(xiàn),遞歸方便擴(kuò)展節(jié)點,靈活性較好。通過該方法,可以方便地展示樹形結(jié)構(gòu)數(shù)據(jù)信息。