为什么这个json4s代码在scala repl中工作但是无法编译?

时间:2014-11-25 22:55:25

标签: json scala json4s scala-2.11

我正在将类似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]                      ^

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

我怀疑某种类型系统存在于我脑海中。

1 个答案:

答案 0 :(得分:3)

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

我怀疑编译器由于含糊不清的导入而没有找到隐含的,尝试更具选择性:the 3rd import seems redundant(带有JsonDSL.WithDouble._的那个)。

有时您可以使用-Xlog-implicits运行scalac以查看未使用implicits的原因。