我使用JSONAssert 1.5.0来比较Jsons。我有一个自定义比较器来忽略ID字段,这将因发情期不同而有所不同。JSON会像这样
{
"id": 34,
"fieldxy": abc
"status": [
{
"id": 69,
"code": 9250,
},
{
"id": 68,
"code": 9251,
}
]
}这个比较器看起来如下:
private final JSONComparator myComparator = new CustomComparator(
JSONCompareMode.NON_EXTENSIBLE,
new Customization("id",(o1, o2) -> true),
new Customization("status",
new ArrayValueMatcher<>(
new CustomComparator(JSONCompareMode.NON_EXTENSIBLE,
new Customization("status[*].id", (o1, o2) -> true))))
);我今天添加了第二个定制,以忽略数组中的字段,如这里所建议的:Ignore specific node within array when comparing two JSON in Java注释:如果没有ArrayValueMatcher,它就不能工作。
忽略这两个id字段,基本字段"id“和状态数组"status.id”中的“id”,现在工作正常。
然而。现在,数组对象的排序突然变得重要-- status对象具有随机排序,现在我的比较失败了,如果"status.code“不在正确的位置,即使使用NON_EXTENSIBLE作为JSONCompareMode。在添加第二个定制和小心之前,status.id总是具有真正的价值,忽略数组排序确实有效。
你知道为什么这不管用吗?现在是否需要为所有数组字段添加自定义?我毫无头绪
编辑:尝试一种不同的方法,也不起作用:
private final JSONComparator myComparator = new CustomComparator(JSONCompareMode.NON_EXTENSIBLE,
new Customization("**.id",(o1, o2) -> true));works:
= 68;status.code = 9250 // status.id = 69;status.code = 9251):失败
发布于 2022-12-02 09:39:41
试试这个:
new CustomComparator(
JSONCompareMode.NON_EXTENSIBLE,
new Customization("id",(o1, o2) -> true),
new Customization("status[*].id", (o1, o2) -> true));https://stackoverflow.com/questions/74042221
复制相似问题