Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Akka HTTP JSON序列化_Scala_Akka Http_Spray Json - Fatal编程技术网

Scala Akka HTTP JSON序列化

Scala Akka HTTP JSON序列化,scala,akka-http,spray-json,Scala,Akka Http,Spray Json,如何控制json的反序列化?例如,我有一个类定义为: 案例类别A(名称:字符串,值:字符串) 我想将以下JSON反序列化为一个对象列表: { "one": "1", "two": "2" } 它应该成为: List(A("one", "1"), A("two", "2")) 问题是该列表的默认JSON表示形式是这样的,我确实不想要: [ { "Name": "one", "Value": "1" }, { "Name": "two", "Value": "2" } ]

如何控制json的反序列化?例如,我有一个类定义为:

案例类别A(名称:字符串,值:字符串)

我想将以下JSON反序列化为一个对象列表:

{
   "one": "1",
   "two": "2"
}
它应该成为:

List(A("one", "1"), A("two", "2"))
问题是该列表的默认JSON表示形式是这样的,我确实不想要:

[
   { "Name": "one", "Value": "1" },
   { "Name": "two", "Value": "2" }
]

我怎样才能做到这一点

您可以为正在查找的结构编写自己的自定义反序列化程序:

  case class A(Name:String, Value:String)

  implicit object ListAFormat extends RootJsonReader[List[A]] {
    override def read(json: JsValue): List[A] = {
      json.asJsObject.fields.toList.collect {
        case (k, JsString(v)) => A(k, v)
      }
    }
  }

  import spray.json._

  def main(args: Array[String]): Unit = {
    val json =
      """
        |{
        |   "one": "1",
        |   "two": "2"
        |}
      """.stripMargin

    val result = json.parseJson.convertTo[List[A]]
    println(result)
  }
印刷品:

List(A(one,1), A(two,2))