Сравнить JSON игнорировать значение идентификатора? - PullRequest
0 голосов
/ 05 июня 2018

Я использую JSON Unit для сравнения двух ответов json.Однако UUID являются динамическими каждый раз, поэтому ответы всегда будут разными, следующее ниже не игнорирует «id» и всегда помечает это как различное.

private void assertWithIgnore(String endpoint, String expected, int code) throws IOException {
    try {
        response.then()
                .statusCode(code)
                .contentType(ContentType.JSON);
        if (compare) {
            assertJsonEquals(response.asString(),
                    resource("expected/" + expected),
                    JsonAssert.whenIgnoringPaths("item[*].id"));
        } else {
            Assert.fail("Not comparing response, write direct to file!");
        }
    } catch (AssertionError error) {
        FileUtils.writeStringToFile(getResultFile(expected), response.prettyPrint());
        failures.put(baseURL + basePath + endpoint, response);
        throw error;
    }
}

Вот небольшой пример JSON:

{
"item": [
{
"id": "1",
"title": "Hello"
}
]
}

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

С JsonAssert это также должно работать ... готово?

ArrayValueMatcher<Object> arrayValueMatcher = new ArrayValueMatcher<>(new CustomComparator(JSONCompareMode.LENIENT, new Customization("item[*].id", new ValueMatcher<Object>() {
                    @Override
                    public boolean equal(Object o1, Object o2) {
                        return true;
                    }
                })));

Customization arrayValueMatcherCustomization = new Customization("item", arrayValueMatcher);


CustomComparator customArrayValueComparator = new CustomComparator(JSONCompareMode.LENIENT, arrayValueMatcherCustomization);


JSONAssert.assertEquals(expect, actual, customArrayValueComparator);

Я использую библиотеку версии 1.5.0

0 голосов
/ 06 июня 2018

Решено выше со следующим:

JsonAssert.setOptions(IGNORING_VALUES);
...