在 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。