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

c json 解析后排序

吉茹定1年前7瀏覽0評論

在 C 語言中,JSON 是一種常見的數據格式。當我們需要在程序中對 JSON 數據進行操作時,通常需要對其進行解析。解析后的數據可能是無序的,而在某些情況下我們需要對其進行排序,這時就需要使用排序算法。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jansson.h>
// 比較函數,用于排序
int cmp(const void *a, const void *b) {
return strcmp(*(char**)a, *(char**)b); // 按字典序排序
}
int main() {
char *json_string = "{ \"name\": \"Alice\", \"age\": 23, \"grade\": 95 }";
json_error_t error;
json_t *json = json_loads(json_string, 0, &error); // 解析 JSON 字符串
char *keys[3] = { "name", "age", "grade" };
json_t *values[3];
for (int i = 0; i < 3; i++) {
values[i] = json_object_get(json, keys[i]); // 獲取 JSON 對象中的值
}
qsort(keys, 3, sizeof(char*), cmp); // 排序
printf("{ ");
for (int i = 0; i < 3; i++) {
printf("\"%s\": ", keys[i]);
if (values[i] == NULL) printf("null");
else if (json_is_string(values[i])) printf("\"%s\"", json_string_value(values[i]));
else if (json_is_number(values[i])) printf("%d", (int)json_number_value(values[i]));
if (i < 2) printf(", ");
}
printf(" }\n");
json_decref(json); // 釋放 JSON 對象的內存
return 0;
}

在上面的代碼中,我們使用了標準庫中的 qsort 函數來對 JSON 對象中的鍵進行排序。注意,我們對的是鍵名,而不是值。對鍵名進行排序后,我們再根據排好序的鍵名依次獲取對應的值,并按照順序輸出。在輸出時需要注意,值的類型可能是字符串、數字或 null。