2016-01-15 4 views
1

Я пытаюсь преобразовать список струны в список JSON массива с помощью json4s библиотеки (https://github.com/json4s/json4s):Преобразование java.util.ArrayList [String] в строку 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 происходит
  • Я также хотел бы предложить использовать Джексон, чем Native учитывая популярность Джексона и обширное тестирование
+0

почему джексон вместо родного? –

+1

Это все о том, какая библиотека используется для создания Json AST. Насколько я знаю, родной будет использовать собственный код Json4s AST. Джексон будет использовать код АСТ от Джексона, который является стандартной библиотекой разбора Json на Java. Учитывая, насколько популярным и проверенным является Джексон, я считаю, что это более безопасный выбор. С точки зрения API ничего не меняется, поэтому вы можете легко переключаться между ними. – marios

Смежные вопросы