【发布时间】:2014-04-14 01:04:53
【问题描述】:
我正在寻找一个支持比较两个 JSON 对象的结构、忽略值trong>、子顺序以及(如果可能的话)可选地忽略响应中的其他元素的 JSON 配对库;专门用于针对预期结构对从 Web 服务返回的 JSON 进行单元测试。 (我想将一个示例响应传递给 assert 方法,并将其结构与实际响应进行比较 - 而不必为每个节点编写断言。只要结构良好,取回不同的值不是问题.)
任何主要的 JSON 库都支持这个吗? (这个问题与Compare two JSON objects in Java基本相同,但我希望断言忽略我的JSON结构中的值,这可能看起来像Wikipedia上的示例......)
【问题讨论】:
-
定义你自己的比较器?
-
请注意,鉴于键/值对是无序的,您需要定义两个 JSON 对象等价的含义。例如,你可以有
{key1:string,key2:[array stuff]}和{key3:[array stuff],key4:string}——它们是不是“相同的形状”? -
嗨@HotLicks,我会说它们不是,除非键相同 - 因为我不关心元素的顺序......所以,我期待匹配键 + 类型,但不匹配值...
-
为此创建一个递归检查器是一项相对容易的工作。只需取一个值,对其执行
instanceof以查看它是哪种类型,路由到数组或映射子例程,让子例程遍历比较计数、键和类型的结构。如果在当前数组或映射例程中遇到数组或映射,则递归调用自己。当您得到不匹配时停止(并返回 false),当在给定级别没有更多可比较时返回 true。
标签: java json unit-testing