Pra*_*eik 12 java json jsonassert
我想比较两个JSON字符串,这是一个巨大的层次结构,并想知道它们在值上的不同之处.但是某些值是在运行时生成的并且是动态的.我想从我的比较中忽略那些特定的节点.
我目前正在使用org.SkyScreamer的JSONAssert进行比较.它给了我很好的控制台输出,但不会忽略任何属性.
对于前
java.lang.AssertionError messageHeader.sentTime
expected:null
got:09082016 18:49:41.123
Run Code Online (Sandbox Code Playgroud)
现在这是动态的,应该被忽略.就像是
JSONAssert.assertEquals(expectedJSONString, actualJSONString,JSONCompareMode, *list of attributes to be ignored*)
Run Code Online (Sandbox Code Playgroud)
如果有人在JSONAssert中建议解决方案,那将会很棒.然而,其他方式也是受欢迎的.
dkn*_*aus 14
您可以使用自定义.例如,如果您需要忽略名为"timestamp"的顶级属性,请使用:
JSONAssert.assertEquals(expectedResponseBody, responseBody,
new CustomComparator(JSONCompareMode.LENIENT,
new Customization("timestamp", (o1, o2) -> true)));
Run Code Online (Sandbox Code Playgroud)
也可以使用像"entry.id"这样的路径表达式.在您的自定义中,您可以使用您喜欢的任何方法来比较这两个值.无论期望值和实际值是什么,上面的示例始终返回true.如果需要,你可以在那里做更复杂的事情.
您可以使用JsonUnit它具有您正在寻找的功能,我们可以忽略字段、路径和空值等。查看更多信息。对于示例,您可以忽略这样的路径
assertJsonEquals(
"{\"root\":{\"test\":1, \"ignored\": 2}}",
"{\"root\":{\"test\":1, \"ignored\": 1}}",
whenIgnoringPaths("root.ignored")
);
Run Code Online (Sandbox Code Playgroud)
有时您需要在比较时忽略某些值。可以像这样使用 ${json-unit.ignore} 占位符
assertJsonEquals("{\"test\":\"${json-unit.ignore}\"}",
"{\n\"test\": {\"object\" : {\"another\" : 1}}}");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11163 次 |
| 最近记录: |