繁体   English   中英

json4s,尝试合并时“从案例类列表到JValue没有可用的隐式视图”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM