Как проверить содержит все с помощью JsonObject? - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь проверить все значения в 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;
    }
...