найти json diff не удается с помощью JSONAssert
Я надеялся использовать Jackson, чтобы найти JSON diff, но он не дает подробных сообщений об ошибках.
Поэтому я попытался использовать JSOnAssert, чтобы найти разницу между двумя строками JSON.
JSONAssert.assertEquals(expectedJsonResponse, actualJsonResponse, false);
К сожалению, похоже, что он не соответствует правильно и дает подробные сообщения об ошибках, как в примерах. Если вы его использовали, не могли бы вы уточнить?
java.lang.AssertionError: data[0] Could not find match for element {"errors":[{"httpStatus":"BAD_REQUEST","personId":null,"details":"User ID [UNKNOWN]. Invalid ID: NONSENSE"}],"successfulIds":["A0","B1","C3"]}
at org.skyscreamer.jsonassert.JSONAssert.assertEquals(JSONAssert.java:222)
Фактический JSON:
{"_links":{"self":{"href":"https://myserver.com:1000/api/person/upload? myCsvFile={myCsvFile}","templated":true}},"data":[{"successfulIds":["A0","XYZ","C3"],"errors":[{"personId":null,"httpStatus":"BAD_REQUEST","details":"User ID [UNKNOWN]. Invalid ID: NONSENSE"}]}]}
Ожидаемый JSON:
{
"_links": {
"self": {
"href": "https://myserver.com:1000/api/person/upload?myCsvFile={myCsvFile}",
"templated": true
}
},
"data": [
{
"successfulIds": [
"A0",
"B1",
"C3"
],
"errors": [
{
"personId": null,
"httpStatus": "BAD_REQUEST",
"details": "User ID [UNKNOWN]. Invalid ID: NONSENSE"
}
]
}
]
}
1 ответ
Я попытался отправить электронное письмо по адресу http://jsonassert.skyscreamer.org/, но получил
Следующее сообщение на jsonassert-dev@skyscreamer.org не было доставлено. Причина проблемы: 5.1.0 - Ошибка неизвестного адреса 550-"5.1.1 Аккаунт электронной почты, к которому вы пытались подключиться, не существует.
Итак, я попробовал ZJsonPatch. Мне нравится то, что при использовании Джексона порядок участников не имеет значения. Другими словами, я сначала пытаюсь проверить равенство с помощью Джексона. Джексон делает заказ самостоятельно. Затем, если это не удается, я использую ZJsonPatch, чтобы сказать мне, в чем разница.
{"op":"replace","path":"/data/0/successfulIds/1","value":"B9"}
который хорошо обрабатывает вложенный JSON.
ObjectMapper mapper = new ObjectMapper();
JsonNode expected = mapper.readTree(expectedJsonResponse);
JsonNode actual = mapper.readTree(actualJsonResponse);
try {
assertEquals(expected, actual);
} catch (AssertionError ae) {
JsonNode patch = JsonDiff.asJson(actual, expected);
throw new Exception(patch.toString(), ae);
}