将 java.util.ArrayList[String] 转换为 json 数组字符串

Convert java.util.ArrayList[String] to json array string

我正在尝试使用 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 数组的标准方法?

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