JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易于閱讀和編寫,常用于前后端數據傳輸。在C語言中,可以使用第三方庫 cJSON 來解析和生成 JSON 數據。
比較兩條 JSON 數據可以通過遍歷兩個 JSON 對象,遞歸比較每個對應屬性的值。下面是一個使用 cJSON 庫比較兩個 JSON 數據的示例:
#include <stdio.h> #include <cjson/cJSON.h> int compareJSON(cJSON *a, cJSON *b) { if (a == NULL || b == NULL) { return 0; } if (a->type != b->type) { return 0; } switch (a->type) { case cJSON_False: case cJSON_True: case cJSON_NULL: return 1; case cJSON_Number: return a->valuedouble == b->valuedouble; case cJSON_String: return strcmp(a->valuestring, b->valuestring) == 0 case cJSON_Array: if (cJSON_GetArraySize(a) != cJSON_GetArraySize(b)) { return 0; } for (int i = 0; i< cJSON_GetArraySize(a); i++) { if (!compareJSON(cJSON_GetArrayItem(a, i), cJSON_GetArrayItem(b, i))) { return 0; } } return 1; case cJSON_Object: cJSON *a_child = NULL; cJSON *b_child = NULL; for (a_child = a->child, b_child = b->child; a_child != NULL && b_child != NULL; a_child = a_child->next, b_child = b_child->next) { if (strcmp(a_child->string, b_child->string) != 0) { return 0; } if (!compareJSON(a_child, b_child)) { return 0; } } if (a_child != NULL || b_child != NULL) { return 0; } return 1; default: return 0; } } void testCompareJSON() { char *json_str_a = "{ \"name\": \"John\", \"age\": 20, \"friends\": [ \"Alice\", \"Bob\" ] }"; char *json_str_b = "{ \"name\": \"John\", \"age\": 20, \"friends\": [ \"Bob\", \"Charlie\" ] }"; cJSON *json_a = cJSON_Parse(json_str_a); cJSON *json_b = cJSON_Parse(json_str_b); if (compareJSON(json_a, json_b)) { printf("JSON objects are equal"); } else { printf("JSON objects are not equal"); } cJSON_Delete(json_a); cJSON_Delete(json_b); } int main() { testCompareJSON(); return 0; }
在上述代碼中,compareJSON 函數遞歸比較兩個 JSON 對象的每個屬性,返回 1 表示兩個對象相等,返回 0 表示不相等。testCompareJSON 函數則演示了如何使用 compareJSON 函數來比較兩個 JSON 對象。