Тестирование двух объектов JSON для равенства, игнорирующего дочерний порядок в Java

Я ищу JSON парсинг библиотеки, которая поддерживает сравнение двух объектов JSON, игнорирующих дочерний порядок, специально для поблочного тестирования JSON, возвращающийся из веб-сервиса.

Какая-либо из крупнейших библиотек JSON поддерживает это? org.json библиотека просто делает ссылочное сравнение.

222
задан Thorbjørn Ravn Andersen 11 February 2019 в 06:02
поделиться

2 ответа

В качестве общего архитектурного момента я обычно не рекомендую позволять зависимостям от конкретного формата сериализации выходить за пределы уровня хранения / сети; таким образом, я сначала рекомендую вам рассмотреть вопрос о проверке равенства между вашими собственными объектами приложения, а не их проявлениями JSON.

Сказав это, в настоящее время я большой поклонник Jackson , который, по моему быстрому чтению их реализации ObjectNode.equals () , показывает, выполняет ли сравнение членства в наборах, которое вы хотите:

public boolean equals(Object o)
{
    if (o == this) return true;
    if (o == null) return false;
    if (o.getClass() != getClass()) {
        return false;
    }
    ObjectNode other = (ObjectNode) o;
    if (other.size() != size()) {
        return false;
    }
    if (_children != null) {
        for (Map.Entry<String, JsonNode> en : _children.entrySet()) {
            String key = en.getKey();
            JsonNode value = en.getValue();

            JsonNode otherValue = other.get(key);

            if (otherValue == null || !otherValue.equals(value)) {
                return false;
            }
        }
    }
    return true;
}
79
ответ дан 23 November 2019 в 04:02
поделиться

Я бы взял библиотеку по адресу http://json.org/java/ и изменил метод equals для JSONObject и JSONArray, чтобы выполнить глубокий тест на равенство. Чтобы убедиться, что он работает независимо от порядка дочерних элементов, все, что вам нужно сделать, это заменить внутреннюю карту на TreeMap или использовать что-то вроде Collections.sort () .

2
ответ дан 23 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: