小编Mar*_*k H的帖子

在Java中比较两个JSON时忽略数组中的特定节点

我想比较Java 8中的两个JSON字符串是否相等,但忽略特定的已知节点,这些节点包含的值应该不同并且可以忍受,例如时间戳。当前使用的是来自org.SkyScreamer的JSONAssert v1.5.0,我能够“忽略”许多这样的节点,但是不能“忽略”数组中的节点。

我想要扩展当前的JSONComparator,使其包含一个Customization,该Customization的第一个“ path”参数具有数组地址。

JSONComparator customisedJobComparator = new CustomComparator(JSONCompareMode.NON_EXTENSIBLE,
            new Customization("id", (o1, o2) -> true),
            new Customization("appointmentBookedDate.$date", (o1, o2) -> true),
            ...
            new Customization("someArray[n].timestamp", (o1, o2) -> true) //<--- this is wrong, what is the correct way for this path address?
            );
Run Code Online (Sandbox Code Playgroud)

下面的代码是我尝试证明解决方案的尝试;除了anArray []。id值外,两个预期/实际JSON字符串都相同。我希望此测试通过,但失败并出现错误:java.lang.AssertionError:anArray [0]找不到元素{“ id”:“ valueA”}的匹配项

@Test
public void compareJsonStrIgnoringDiffInArray() {
    String errorMsg = "";
    String expectedJsonStr = "{\"anArray\": [{\"id\": \"valueA\"}, {\"colour\": \"Blue\"}]}";
    String actualJsonStr = "{\"anArray\": [{\"id\": \"valueB\"}, {\"colour\": \"Blue\"}]}";

    //Create custom comparator which compares two json …
Run Code Online (Sandbox Code Playgroud)

java json jsonassert

4
推荐指数
1
解决办法
1454
查看次数

标签 统计

java ×1

json ×1

jsonassert ×1