【发布时间】:2019-06-05 09:16:34
【问题描述】:
对于这个案例类:
import io.circe.generic.JsonCodec
@JsonCodec
case class Stuff(things: Array[String])
这个测试通过了(案例类到json测试):
import io.circe.parser.decode
import io.circe.syntax._
import org.scalatest._
val caseClass = Stuff(things = Array("one", "two"))
val json = caseClass.asJson.spaces2
json shouldEqual
"""{
| "things" : [
| "one",
| "two"
| ]
|}""".stripMargin
但是,这失败了(json to case class test)
import io.circe.parser.decode
import io.circe.syntax._
import org.scalatest._
val json =
"""{
| "things" : [
| "one",
| "two"
| ]
|}""".stripMargin
val caseClass = Right(decode[Stuff](json))
caseClass shouldEqual Stuff(things = Array("one", "two"))
在调试器中单步执行它,似乎数组没有像我预期的那样被解码,它似乎是对象标识/内存地址,它总是不同的,所以我的测试失败了:
[Ljava.lang.String;@2fa7ae9
请注意,这似乎只发生在数组上,我的 json blob 中有更多的东西,我在这个例子中遗漏了 - 地图和嵌套的案例类都被解码并且可以比较,只有当数组是补充说比较失败 - 我错过了什么吗?
【问题讨论】:
-
这不是您应该比较数组的方式。只需比较数组中的元素。并使用
equals比较这些字符串。