json - 比较Scala中的json相等性

标签 json scala equals equality

如何在Scala中比较两个json结构是否相同?

例如,如果我有:

{
  resultCount: 1,
  results: [
    {
      artistId: 331764459,
      collectionId: 780609005
    }
  ]
}




{
  results: [
    {
      collectionId: 780609005,
      artistId: 331764459
    }
  ],
  resultCount: 1
}


他们应该被认为是平等的

最佳答案

如果正确编写了json库,则您应该能够简单地执行json1 == json2。那对你不起作用吗?

这与spray-json一起使用,尽管我希望每个json库都一样:

import spray.json._
import DefaultJsonProtocol._
Welcome to Scala version 2.10.4 (OpenJDK 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val json1 = """{ "a": 1, "b": [ { "c":2, "d":3 } ] }""".parseJson
json1: spray.json.JsValue = {"a":1,"b":[{"c":2,"d":3}]}

scala> val json2 = """{ "b": [ { "d":3, "c":2 } ], "a": 1 }""".parseJson
json2: spray.json.JsValue = {"b":[{"d":3,"c":2}],"a":1}

scala> json1 == json2
res1: Boolean = true


Spray-json使用一个不变的scala Map来表示由解析产生的抽象语法树中的JSON对象,因此,正是Map的相等语义使这一工作得以实现。

关于json - 比较Scala中的json相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176303/

相关文章:

javascript - 在模态中显示原始 JSON

json - 有没有直接替换后缀和前缀的方法?

scala - 是 <- 只能由编译器访问

hibernate - 当lazy=true 时,如何让equals() 与Hibernate 实体一起工作?

java - 为什么equals和hashCode定义在Object中?

javascript - 针对 JSON 模式验证 JS 测试

jquery - 无法加载资源: the server responded with a status of 404 (NOT FOUND)

scala - 未找到 Kind 编译器插件 λ

performance - 10,000 个静态立方体的 OpenGL 性能

string - 在 C# 中检查两个字符串的相等性时, string.Equals() 或 == 哪个更好?