C JSON 是一種輕量級的數(shù)據(jù)交換格式,它以文本形式表示復(fù)雜的數(shù)據(jù)結(jié)構(gòu),常用于網(wǎng)絡(luò)數(shù)據(jù)傳輸。在實際應(yīng)用中,經(jīng)常需要從 JSON 數(shù)據(jù)中篩選出不重復(fù)的數(shù)據(jù),這時就需要用到一些特定的技巧。
// 這是一個示例 JSON 數(shù)據(jù) { "data": [ {"id": 1, "name": "張三"}, {"id": 2, "name": "李四"}, {"id": 3, "name": "張三"}, {"id": 4, "name": "王五"} ] } // 使用 cJSON 庫解析 JSON 數(shù)據(jù),遍歷數(shù)組并去重 cJSON *root = cJSON_Parse(json_str); cJSON *data = cJSON_GetObjectItem(root, "data"); cJSON *uniq_data = cJSON_CreateArray(); for(int i = 0; i< cJSON_GetArraySize(data); i++) { cJSON *item = cJSON_GetArrayItem(data, i); cJSON *dup_item = cJSON_GetObjectItem(uniq_data, cJSON_Print(item)); if(!dup_item) { cJSON_AddItemToArray(uniq_data, cJSON_Duplicate(item, true)); } }
上述代碼使用了 cJSON 庫解析 JSON 數(shù)據(jù),并通過遍歷數(shù)據(jù)數(shù)組,將不重復(fù)的數(shù)據(jù)加入新的數(shù)組中。其中 cJSON_GetObjectItem 和 cJSON_GetArrayItem 可以獲取 JSON 對象和數(shù)組的成員,cJSON_Duplicate 可以復(fù)制一個 cJSON 對象,cJSON_Print 可以將 cJSON 對象轉(zhuǎn)化為字符串。
通過上述代碼,我們可以在應(yīng)用中方便地篩選出不重復(fù)的 JSON 數(shù)據(jù)。當(dāng)然,在實際應(yīng)用中,還需要考慮一些特殊情況,比如 JSON 數(shù)據(jù)可能存在嵌套等復(fù)雜結(jié)構(gòu),因此使用時需要根據(jù)具體情況進行修改。