将 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
我正在尝试使用 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