3

我正在将类似 json 的字符串转换为 json,以下代码在 scala repl 中工作

import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.JsonDSL.WithDouble._
import org.json4s.native.JsonMethods._

val value = "{100:1.50;500:1.00;1000:0.50}"

val data = value.stripPrefix("{").stripSuffix("}").split(";").map(a => {
  val b = a.split(":")
  (b(0),b(1))
}).toMap
compact(render(data))

但是当它编译时,我收到以下错误

[error] ... type mismatch;
[error]  found   : scala.collection.immutable.Map[String,String]
[error]  required: org.json4s.JValue
[error]     (which expands to)  org.json4s.JsonAST.JValue
[error]       compact(render(data))
[error]                      ^

为什么会这样,我该如何解决?

我怀疑与我头顶的类型系统有关。

4

1 回答 1

3

render()是从导入的JsonMethods._,它实际上需要一个 JValue。您已经map2jvalue从这两个导入import org.json4s.JsonDSL._import org.json4s.JsonDSL.WithDouble._.

我怀疑编译器由于导入不明确而没有找到隐式,请尝试更具选择性:第三次导入似乎是多余的(带有 的那个JsonDSL.WithDouble._)。

有时您可以使用 -Xlog-implicits 运行 scalac 来查看为什么不使用隐式。

于 2014-11-25T23:16:07.183 回答