Json String
は、さらに別のネストされたオブジェクトを持つオブジェクトを表しています。また、私はこのJson String
から削除する必要があるキーのリストを持っています。これらのキーは、この文字列内のオブジェクトのネストされたレベルにあります。最後に、この編集されたJson文字列を別の文字列と比較し、その違いを出力する必要があります。比較の際にこれらのキーを無視する必要があるので、最初のJson文字列からそれらのキー値ペアを削除する必要があります。現在、私は3210で提供されているLinkedTreeMap
にJson Stringを変換してから、Map.difference()
を比較しています。これに対する解決策を提案してください。LinkedTreeMapを使用してJson Stringからキー値ペア(任意のレベルでネスト)を削除します
-1
A
答えて
1
フィールドを見つけてそれが存在する場合は削除するまで、ネストされたLinkedTreeMap内を再帰的にトラバースしました。 Key
のフルパス(JSON文字列からDESCを除去するために、以下のJSONサンプルのよう「objects.desc」)オブジェクト内
JSONサンプルを正確なキー値の位置を取得するために提供される必要があります:
{
"message": "MSG",
"code": "COD001",
"objects": [
{
"resource": "Student",
"field": "StudentId",
"desc": "Student Description"
}
]
}
コードサンプル:
public MapDifference<String, Object> getMapDifference(String jsonString1, String jsonString2) {
MapDifference<String, Object> mapDifference = null;
Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, Object>>() {
}.getType();
Map<String, Object> firstMap = gson.fromJson(jsonString1, mapType);
Map<String, Object> secondMap = gson.fromJson(jsonString2, mapType);
firstMap = CollectionUtils.isEmpty(firstMap) ? new HashMap<>() : firstMap;
secondMap = CollectionUtils.isEmpty(secondMap) ? new HashMap<>() : secondMap;
//This contains the List of keys that is required to be filtered out from Json Strings before comparision like {"message", "objects.desc"}
List<String> firstIgnoreList = getIgnoreList1();
List<String> secondIgnoreList = getIgnoreList2();
filterKeys(firstMap, firstIgnoreList);
filterKeys(secondMap, secondIgnoreList);
mapDifference = Maps.difference(firstMap, secondMap);
return mapDifference;
}
private void filterKeys(Map<String, Object> keyMap, List<String> ignoreList) {
if (!(CollectionUtils.isEmpty(keyMap) || CollectionUtils.isEmpty(ignoreList))) {
ignoreList.stream().parallel().forEach(key -> recursiveRemove(keyMap, key));
}
}
private static void recursiveRemove(Map<String, Object> keyMap, String key) {
List<String> path = Arrays.asList(StringUtils.split(key.trim(), "."));
int size = path.size();
int index = 0;
List<LinkedTreeMap> treeMapList = new ArrayList<LinkedTreeMap>();
treeMapList.add((LinkedTreeMap) keyMap);
while (index != size - 1) {
int i = index++;
List<LinkedTreeMap> treeMapListTemp = new ArrayList<LinkedTreeMap>();
treeMapList.stream().parallel().forEach(treeMap -> {
Object obj = treeMap.get(path.get(i));
if (obj instanceof List) {
treeMapListTemp.addAll((List<LinkedTreeMap>) obj);
} else if (obj instanceof LinkedTreeMap) {
treeMapListTemp.add((LinkedTreeMap) obj);
}
});
treeMapList = treeMapListTemp;
}
treeMapList.stream().parallel().forEach(treeMap -> treeMap.remove(path.get(size - 1)));
}
関連する問題
- 1. Hiveマップからキーと値のペアを削除しますか?
- 2. ネストされたJSON内の任意の場所でキーを削除
- 3. jqueryを使用してキー、値のペアでjsonデータを印刷
- 4. 削除するキーのリストを指定して、キー、値のペアを辞書から削除する
- 5. 値を使って地図からキーと値のペアを削除する
- 6. AngularJSを使用したJSONキー値ペアからの値の引き出し
- 7. テンプレートを使用して任意のコンテナを削除する
- 8. 解析(キーと値のペアから値を削除)
- 9. PILを使用して任意の画像から透明/アルファを削除
- 10. 任意のネストされたjsonデータから任意のネストされたjsonデータをjqで抽出する
- 11. jsonキーと値のペアをポストグルで減らします
- 12. Python:キーと値のペアのリストから任意にネストされた辞書を作成する
- 13. 任意のキーを使用したJSONスキーマ検証
- 14. laravelを使用してjsonから&quotを削除します
- 15. 設定ファイルからキー/値ペアを削除するqsetting
- 16. jacksonを使用してjsonからnull値を削除します。
- 17. PostgreSQL JSONクイック検索(任意のキーからの検索値)
- 18. NumPy配列から値のペアを削除します
- 19. Groovyを使用してStringからNEL改行を削除しますか?
- 20. Javaを使用してString値を削除する
- 21. Java:ネストされたjsonオブジェクトにキー値のペアを追加します。
- 22. string []から空の値を削除しますか?
- 23. javascriptを使用して値をDropDownListから削除します
- 24. 任意のフォルダからすべてのファイルを削除する
- 25. jsonオブジェクトからスカラからキー、値を削除する
- 26. 使用して任意の値
- 27. 削除キーを使用してDataGridから行を削除する方法
- 28. キー値のペアx = xがあるところで$ array []を削除します
- 29. 値が数値の場合、jmespathを使用してキー/値ペアから値を取得します。
- 30. インデックスでjavascriptのキーと値のペアを削除する