JSON是一種常用的數據格式,它經常被用于數據交換和存儲。在處理JSON數據時,我們有時會遇到重復的數據,并需要去重復。在C語言中,我們可以使用一些方法來實現JSON數據去重復的功能。
#include#include#include#includevoid remove_duplicate(cJSON *object);
int main()
{
char *json_str = "{\"name\": \"John\",\"age\": 30,\"cars\": [\"Ford\",\"BMW\",\"Fiat\",\"BMW\"]}";
cJSON *json = cJSON_Parse(json_str);
remove_duplicate(json);
char *new_json_str = cJSON_Print(json);
printf("new_json_str: %s\n", new_json_str);
cJSON_Delete(json);
free(new_json_str);
return 0;
}
void remove_duplicate(cJSON *object)
{
if(object == NULL)
{
return;
}
switch (object->type)
{
case cJSON_Array:
{
int array_size = cJSON_GetArraySize(object);
for(int i = 0; i< array_size; i++)
{
cJSON *array_item = cJSON_GetArrayItem(object, i);
remove_duplicate(array_item);
}
for(int i = 0; i< array_size; i++)
{
cJSON *array_item1 = cJSON_GetArrayItem(object, i);
for(int j = i + 1; j< array_size; j++)
{
cJSON *array_item2 = cJSON_GetArrayItem(object, j);
if(cJSON_Compare(array_item1, array_item2, 1))
{
cJSON_DeleteItemFromArray(object, j);
array_size--;
j--;
}
}
}
break;
}
case cJSON_Object:
{
cJSON *child = object->child;
while(child != NULL)
{
remove_duplicate(child);
child = child->next;
if(child != NULL && cJSON_Compare(child, object, 1))
{
cJSON_DeleteItemFromObject(object, child->string);
}
}
break;
}
default:
{
break;
}
}
}
在上面的代碼中,我們通過使用cjson庫實現了JSON數據去重復的功能。具體而言,我們定義了一個remove_duplicate函數,它可以遞歸地遍歷JSON數據,并查找重復的數據項。對于重復項,我們使用cJSON_DeleteItemFromArray和cJSON_DeleteItemFromObject函數將其刪除。
在實際使用中,我們可以將上述代碼集成到我們的應用程序中,以實現更加高效的JSON數據去重復功能。