Я пытаюсь проверить все значения в CandList, чтобы увидеть, содержит ли он все значения из целевой строки. Входная строка имеет формат JSON, и я преобразую ее в JsonObject, используя gson. Я знаю, что простое использование entrySet () не может проверить вложенные. Но я не знаю, как это сделать правильно.
Входная строка, которая является целью, может быть такой:
{"address":{"city":"LA","state":"CA"},"status":0}
и получение из списка CandList, который был добавлен:
{"id":1, "address":{"city":"LA","state":"CA","No":12},"status":0}
{"id":2, "address":{"city":"LA","state":"CA","No":80},"status":0}
{"id":3, "address":{"city":"San Francisco","state":"CA","No":110},"status":1}
вывод, который соответствует целевому требованию, должен быть:
{"id":1, "address":{"city":"LA","state":"CA","No":12},"status":0}
{"id":2, "address":{"city":"LA","state":"CA","No":80},"status":0}
Я не уверен, как это сделать, я знаю, что могу использовать больше циклов, но что если я не не знаете, сколько там вложенных объектов? Есть ли способ решить эту проблему? Спасибо!
private List<Map> getMatchInput(String string) {
JsonObject target = new JsonParser().parse(string).getAsJsonObject();
List<Map> res = new ArrayList<>();
for (Map entry : candList.values()) {
Gson gson = new Gson();
String jsonString = gson.toJson(entry);
JsonObject item = new JsonParser().parse(jsonString).getAsJsonObject();
if (item.entrySet().containsAll(target.entrySet())) {
res.add(entry);
}
}
return res;
}