我正在寻找一个JSON解析库,它支持比较两个忽略子顺序的JSON对象,专门用于对从web服务返回的JSON进行单元测试.

是否有任何主要的JSON库支持这一点?json库只进行引用比较.

推荐答案

作为一个总体架构观点,我通常建议不要让对特定序列化格式的依赖超出存储/网络层;因此,我首先建议您考虑在自己的应用程序对象之间测试相等性,而不是测试它们的JSON表现形式.

话虽如此,我目前是Jackson的忠实粉丝,我快速阅读了他们的ObjectNode.equals()实现,这表明你想要的集合成员比较:

public boolean equals(Object o)
{
    if (o == this) return true;
    if (o == null) return false;
    if (o.getClass() != getClass()) {
        return false;
    }
    ObjectNode other = (ObjectNode) o;
    if (other.size() != size()) {
        return false;
    }
    if (_children != null) {
        for (Map.Entry<String, JsonNode> en : _children.entrySet()) {
            String key = en.getKey();
            JsonNode value = en.getValue();

            JsonNode otherValue = other.get(key);

            if (otherValue == null || !otherValue.equals(value)) {
                return false;
            }
        }
    }
    return true;
}

Java相关问答推荐

如何将一些命令写入Chrome控制台,然后使用Java将输出存储在selenium中

如何在Java中设置字符串与中文字符对齐?

如何跟踪我在数组中的位置

Java中Stream(java.util.stream)和linkedList数据 struct 之间是什么关系?

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

具有默认分支的JUnit代码覆盖率切换声明

我可以从Java模块中排除maven资源文件夹吗?

如何将kotlin代码转换为java

路径映射未发生

为什么我要创建一个单独的互斥体/锁对象?

如何获得执行人?

Spring Boot Maven包

Kotlin内联互操作:强制装箱

具有阻塞方法的开源库是否应该为执行提供异步选项?

扩展视图高度,并将其拖动到较低的视图上,而不是将其向下推?

允许同时执行两个方法,但不能同时执行这两个方法

AbstractList保证溢出到其他方法

为什么创建Java动态代理需要接口参数

不能在 map 上移除折线

Springboot应用程序无法识别任何@RestController或@Service,我认为@Repository也无法识别