2016-01-15 147 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