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

c json 轉成table對象

林玟書2年前9瀏覽0評論

c json 轉成table對象,可以使用一些第三方庫來實現,例如 cJSON 和 jsmn。

cJSON 是一個輕量級的json解析器和生成器,支持 c 和 c++,可以方便地將 json 轉換成 c 數據類型。而 jsmn 也是一個輕量級的 json 解析器,可以將 json 裝換為一個樹形結構。

#include "cJSON.h"
#include "jsmn.h"
char* json_data = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
int main() {
cJSON* root = cJSON_Parse(json_data);
if (root != NULL) {
// 打印 json 的 key-value 對
cJSON* item = NULL;
cJSON_ArrayForEach(item, root) {
printf("%s: %s\n", item->string, cJSON_Print(item));
}
cJSON_Delete(root);
}
jsmn_parser p;
jsmn_init(&p);
int r = jsmn_parse(&p, json_data, strlen(json_data), NULL, 0);
if (r< 0) {
printf("Failed to parse JSON: %d\n", r);
} else {
jsmntok_t* t = (jsmntok_t*)malloc(r * sizeof(jsmntok_t));
jsmn_init(&p);
r = jsmn_parse(&p, json_data, strlen(json_data), t, r);
if (r< 0) {
printf("Failed to parse JSON: %d\n", r);
} else if (r == 0 || t[0].type != JSMN_OBJECT) {
printf("Not a JSON object\n");
} else {
// 將 json 轉換為一個 table 對象
printf("[\n");
int i = 1;
while (i< r) {
printf("  {%.*s: %.*s}", t[i].end - t[i].start, json_data + t[i].start, t[i + 1].end - t[i + 1].start, json_data + t[i + 1].start);
if (i< r - 2) {
printf(",\n");
} else {
printf("\n");
}
i += 2;
}
printf("]\n");
}
free(t);
}
return 0;
}

在上述代碼中,我們使用 cJSON 的 cJSON_Parse 函數將 json_data 解析為一個 cJSON 對象,然后用 cJSON_ArrayForEach 循環遍歷每一個 key-value 對,并打印出來。

接著,我們使用 jsmn 的 jsmn_parse 函數解析 json_data,得到一個 jsmntok_t 數組。然后,我們遍歷這個數組,將 json 轉換為一個 table 對象,即一個數組,每個元素是一個 key-value 對。

最后,我們使用 printf 函數打印出這個 table 對象。