2016-01-15 114 views
1

我试图使用json4s库(https://github.com/json4s/json4s)为String的列表转换成JSON数组列表:转换的java.util.ArrayList [字符串]以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数组吗?

回答

1

Json4s需要一个org.json4s.Formats的实例,以便将Scala类型(如case类和本机集合)转换(序列化)为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转换发生
  • 我也建议使用杰克逊比给杰克逊的知名度和广泛的测试本机代码更透明的收集
+0

为什么杰克逊而不是本地? –

+1

这是关于什么库用于创建Json AST的全部内容。就我所知,native将使用本地的Json4s AST代码。 Jackson将使用Jackson的AST代码,这是Java中的标准Json解析库。鉴于杰克逊的受欢迎程度和测试结果,我觉得这是一个更安全的选择。在API方面没有任何变化,所以你可以轻松地在两者之间切换。 – marios