【问题标题】:Convert java.util.ArrayList[String] to json array string将 java.util.ArrayList[String] 转换为 json 数组字符串
【发布时间】:2016-01-15 17:00:15
【问题描述】:

我正在尝试使用 json4s 库 (https://github.com/json4s/json4s) 将字符串列表转换为 json 数组列表:

object Convert {

  import scala.collection.JavaConversions._
  import org.json4s._
  import org.json4s.native.JsonMethods._

  val l = new java.util.ArrayList[String]()
  l.add("1")
  l.add("1")
  l.add("1")

  println(compact(render(l.toList)))


}

导致错误:

l.toList 导致编译器错误:

 type mismatch; found : List[String] required: org.json4s.JValue (which expands to) org.json4s.JsonAST.JValue

数组的每个元素都需要转换为 JValue 吗?是否有将 scala List[String] 转换为 json 数组的标准方法?

【问题讨论】:

    标签: scala json4s


    【解决方案1】:

    Json4s 需要 org.json4s.Formats 的实例在范围内,以便将 Scala 类型(如案例类和本机集合)转换(序列化)为 JSON。

    这是我对您拥有的转换器代码的看法:

    object Convert {
      import scala.collection.JavaConverters._ // I prefer this to JavaConversions
      import org.json4s._
      import org.json4s.native.Serialization._ // provides write()
    
      implicit val formats = org.json4s.DefaultFormats 
    
      val l = new java.util.ArrayList[String]()
      l.add("1")
      l.add("1")
      l.add("1")
    
      val asJsonString = write(l.asScala)
      println(compact(parse(asJsonString)))
    }
    

    注意事项:

    • 我更喜欢 JavaConverters 而不是 JavaConversions。它为集合提供了一个隐式定义的 asScala 方法,这使得在发生 Java2Scala 转换的代码中更加透明
    • 鉴于 Jackson 的受欢迎程度和广泛的测试,我还建议使用 Jackson 而不是 Native

    【讨论】:

    • 为什么用jackson而不是native?
    • 一切都是关于使用什么库来创建 Json AST。据我所知,native 将使用原生的 Json4s AST 代码。 Jackson 将使用来自 Jackson 的 AST 代码,这是 Java 中的标准 Json 解析库。鉴于杰克逊的受欢迎程度和测试程度,我觉得这是一个更安全的选择。在 API 方面没有任何变化,因此您可以轻松地在两者之间切换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多