【问题标题】:Why does this json4s code work in the scala repl but fail to compile?为什么这个 json4s 代码在 scala repl 中工作但无法编译?
【发布时间】:2014-11-25 22:55:24
【问题描述】:

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

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

我怀疑类型系统有问题。

【问题讨论】:

    标签: json scala json4s scala-2.11


    【解决方案1】:

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

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

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

    【讨论】:

    • 你是对的!谢谢。很好的答案。我删除了多余的import org.json4s.JsonDSL._,一切正常。感谢您对-Xlog-implicits 的精彩说明!
    猜你喜欢
    • 2013-04-12
    • 2020-03-26
    • 1970-01-01
    • 2019-05-23
    • 2014-01-19
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多