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

Scala 将java.util.ArrayList[String]转换为json数组字符串,scala,json4s,Scala,Json4s,我正在尝试使用json4s库()将字符串列表转换为json数组列表: 导致错误的原因: l.toList导致编译器错误: type mismatch; found : List[String] required: org.json4s.JValue (which expands to) org.json4s.JsonAST.JValue 数组的每个元素都需要转换为JValue吗?是否有将scala列表[字符串]转换为json数组的标准方法?Json4s需要一个org.Json4s.Forma

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

导致错误的原因:

l.toList
导致编译器错误:

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

数组的每个元素都需要转换为JValue吗?是否有将scala列表[字符串]转换为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)))
}
注:

  • 比起Java转换,我更喜欢Java转换器。它为集合提供了一个隐式定义的
    asScala
    方法,使得在代码中发生Java2Scala转换时更加透明
  • 考虑到Jackson的人气和广泛的测试,我还建议使用Jackson而不是Native

为什么选择jackson而不是native?关键在于使用什么库来创建Json AST。据我所知,native将使用本机Json4s AST代码。Jackson将使用来自Jackson的AST代码,这是Java中的标准Json解析库。考虑到杰克逊是多么受欢迎和考验,我觉得这是一个更安全的选择。就API而言,没有任何变化,因此您可以轻松地在两者之间切换。
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)))
}