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

c json轉(zhuǎn)map

吉茹定1年前9瀏覽0評論
JSON是一種輕量級的數(shù)據(jù)交換格式,它以鍵值對的形式存儲數(shù)據(jù),并且易于讀取和操作。在C語言中,我們可以使用第三方庫來處理JSON數(shù)據(jù)。本文將會介紹如何將JSON數(shù)據(jù)轉(zhuǎn)換成C語言中的map數(shù)據(jù)結(jié)構(gòu)。 首先,我們需要使用一個C語言中的JSON庫。這里推薦cJSON庫,它是一個輕巧的JSON解析器,使用方便且功能齊全。在使用cJSON之前,我們需要先下載并安裝它。 安裝完成后,我們就可以開始使用cJSON了。下面是一個簡單的JSON數(shù)據(jù):
{
"name": "Tom",
"age": 18,
"friends": ["Bob", "Lucy", "John"]
}
我們可以使用cJSON庫來解析上面的數(shù)據(jù),然后將其轉(zhuǎn)換成C語言中的map數(shù)據(jù)結(jié)構(gòu)。下面是代碼示例:
#include#include#include "cJSON.h"
typedef struct _map_node {
char* key;
cJSON* value;
struct _map_node* next;
} map_node;
typedef struct _map {
map_node* head;
} map;
map* json_to_map(const char* json_str)
{
map* m = (map*) malloc(sizeof(map));
m->head = NULL;
cJSON* root = cJSON_Parse(json_str);
cJSON* child = root->child;
while (child != NULL) {
map_node* node = (map_node*) malloc(sizeof(map_node));
node->key = strdup(child->string);
node->value = child;
node->next = m->head;
m->head = node;
child = child->next;
}
cJSON_Delete(root);
return m;
}
int main()
{
char* json_str = "{\"name\":\"Tom\",\"age\":18,\"friends\":[\"Bob\",\"Lucy\",\"John\"]}";
map* m = json_to_map(json_str);
map_node* node = m->head;
while (node != NULL) {
printf("%s: ", node->key);
cJSON* value = node->value;
if (value->type == cJSON_String) {
printf("%s\n", value->valuestring);
} else if (value->type == cJSON_Number) {
printf("%d\n", value->valueint);
} else if (value->type == cJSON_Array) {
cJSON* child = value->child;
while (child != NULL) {
printf("%s ", child->valuestring);
child = child->next;
}
printf("\n");
}
node = node->next;
}
return 0;
}
以上代碼中,我們定義了兩個結(jié)構(gòu)體,用于表示map和map中的節(jié)點。在json_to_map函數(shù)中,我們首先解析JSON數(shù)據(jù),然后遍歷其每一個子節(jié)點,將節(jié)點的鍵和值存入map中。最后返回map結(jié)構(gòu)體。在main函數(shù)中,我們使用循環(huán)遍歷map中的每一個節(jié)點,并且打印出其鍵和值。 執(zhí)行上述代碼,輸出結(jié)果如下:
friends: Bob Lucy John
age: 18
name: Tom
可以看到,我們成功地將JSON數(shù)據(jù)轉(zhuǎn)換成了C語言中的map數(shù)據(jù)結(jié)構(gòu)。通過這種方式,我們可以輕松地讀取和操作JSON數(shù)據(jù)。