Я ищу JSON парсинг библиотеки, которая поддерживает сравнение двух объектов JSON, игнорирующих дочерний порядок, специально для поблочного тестирования JSON, возвращающийся из веб-сервиса.
Какая-либо из крупнейших библиотек JSON поддерживает это? org.json библиотека просто делает ссылочное сравнение.
В качестве общего архитектурного момента я обычно не рекомендую позволять зависимостям от конкретного формата сериализации выходить за пределы уровня хранения / сети; таким образом, я сначала рекомендую вам рассмотреть вопрос о проверке равенства между вашими собственными объектами приложения, а не их проявлениями 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;
}
Я бы взял библиотеку по адресу http://json.org/java/ и изменил метод equals
для JSONObject и JSONArray, чтобы выполнить глубокий тест на равенство. Чтобы убедиться, что он работает независимо от порядка дочерних элементов, все, что вам нужно сделать, это заменить внутреннюю карту на TreeMap
или использовать что-то вроде Collections.sort ()
.