【问题标题】:Serialization of array and map to json in ScalaScala中数组和映射到json的序列化
【发布时间】:2013-11-27 13:09:49
【问题描述】:

我正在尝试从数组构造 json 字符串。我可以使用 JsonAST 获取 json 字符串格式,如下所示:

import net.liftweb.json.JsonAST
import net.liftweb.json.JsonDSL._
import net.liftweb.json.Printer._

val map = Map("a" -> "b", "c" -> "d")
val c = compact(JsonAST.render(map)) 
println(c) //op : {"a":"b","c":"d"}

当我尝试对数组做同样的事情时,它会抛出以下错误:required: net.liftweb.json.JsonAST.JValue

我正在寻找像 val a = Array(1,2,3) 这样的数组序列化

获取json响应的常用方式是什么,支持所有数据结构?

【问题讨论】:

    标签: scala scala-collections scalatra


    【解决方案1】:

    我使用json4s(恰好在后台使用lift-json):

    import org.json4s.native.Serialization.write
    import org.json4s.DefaultFormats
    
    val a = Array(1,2,3,4,5)
    
    implicit val formats = DefaultFormats
    println(write(a))  // [1,2,3,4,5]
    

    它还可以序列化更复杂的值:

    case class Test(map: Map[String, Int], arr: Array[Int])
    val t = Test(Map("one" -> 1, "two" -> 2), Array(1, 2, 3, 4, 5))
    println(write(t))  // {"map":{"one":1,"two":2},"arr":[1,2,3,4,5]}
    

    【讨论】:

      【解决方案2】:

      您只需要将数组转换为列表,看起来好像 liftweb AST 没有为原始数组类型定义隐式转换......所以像这样:

      scala> val array = Array(1,2,3,4,5)
      scala>  val c = compact(JsonAST.render(array.toList))
      

      (注意添加“toList”)工作正常。

      希望这会有所帮助。

      【讨论】:

      • 无论如何都会自动检测并序列化它。如果我给出任何带有映射或数组作为成员变量的对象结构,这将很有帮助。我不应该担心内部结构是什么。最后我应该能够获取json字符串......你能在那个角度给出任何建议
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      相关资源
      最近更新 更多