не удается найти json diff с помощью JSONAssert - PullRequest
0 голосов
/ 27 мая 2020

Я надеялся использовать 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 Ответ

0 голосов
/ 29 мая 2020

Я попытался отправить электронное письмо на адрес 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);
}
...