Why does this json4s code work in the scala repl but fail to compile?

來源:互聯網
上載者:User

標籤:

I‘m converting a json-like string into json, and the following code works in the 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))}).toMapcompact(render(data))

But when it is compiled, I‘m getting the following error

[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]                      ^

Why is this, and how might I fix it?

I suspect something with the type system that is over my head.

 

 

up vote2down voteaccepted

render() is imported from JsonMethods._ and it actually requires a JValue. You have imported an implicit map2jvalue twice from those two imports import org.json4s.JsonDSL._ and import org.json4s.JsonDSL.WithDouble._.

I suspect that the compiler didn‘t find the implicit due to the ambiguous imports, try to be more selective: the 3rd import seems redundant (the one with JsonDSL.WithDouble._).

Sometimes you can run scalac with -Xlog-implicits to see why implicits are not used.

Why does this json4s code work in the scala repl but fail to compile?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.