![](/img/trans.png)
[英]Representing a list of JSON tuples as a case class field, with Json4s
[英]json4s, “no implicit view available from List of case class to JValue” when attempting to combine
我尝试通过组合一些字段(包括案例类的Seq)来生成json。
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.jackson.JsonMethods._
import org.json4s.jackson.Serialization
import org.json4s.jackson.Serialization.{read, write}
object JsonExample extends App {
case class CC(eid: String, num: Integer)
implicit val formats:Formats = Serialization.formats(NoTypeHints)
val json = ("api_key" -> "1234") ~ ("attributes" -> List(CC("123", 123), CC("222", 222)))
println(write(json))
}
但是我遇到了编译错误
错误:(9,36)从List [JsonExample.CC] => org.json4s.JsonAST.JValue没有可用的隐式视图。 val json =(“ api_key”->“ 1234”)〜(“ attributes”-> List(CC(“ 123”,123),CC(“ 222”,222)))
错误:(9,36)方法〜的参数不足:(隐式ev1:List [JsonExample.CC] => org.json4s.JsonAST.JValue)org.json4s.JsonAST.JObject。 未指定的值参数ev1。 val json =(“ api_key”->“ 1234”)〜(“ attributes”-> List(CC(“ 123”,123),CC(“ 222”,222)))
请注意,如果我删除组合〜,那么它将起作用:val json =(“ attributes”-> List(CC(“ 123”,123),CC(“ 222”,222)))
请帮忙。
您可以在“扩展DSL”部分中看到,如果要向DSL中添加CC
类支持,则应提供隐式转换type DslConversion = CC => JValue
。
因此,您应该编写如下内容:
import org.json4s._
import org.json4s.JsonDSL._
import org.json4s.jackson.Serialization
import org.json4s.jackson.Serialization.write
object JsonExample extends App {
implicit val formats = Serialization.formats(NoTypeHints)
case class CC(eid: String, num: Int)
implicit def ccToJValue(data: CC)(implicit formats: Formats): JValue = Extraction.decompose(data)
val json = ("api_key" -> "1234") ~ ("attributes" -> List(CC("123", 123), CC("222", 222)))
println(write(json))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.