Сериализация массива и отображение в json в Scala

Я пытаюсь построить строку json из массива. Я могу получить формат строки json, используя JsonAST, как показано ниже:

import net.liftweb.json.JsonAST
import net.liftweb.json.JsonDSL._
import net.liftweb.json.Printer._

val map = Map("a" -> "b", "c" -> "d")
val c = compact(JsonAST.render(map)) 
println(c) //op : {"a":"b","c":"d"}

Когда я пытаюсь сделать то же самое с массивом, он выдает следующую ошибку: required: net.liftweb.json.JsonAST.JValue

Я ищу сериализацию массива, например val a = Array(1,2,3)

Каков общий способ получения ответа json, который поддерживает все структуры данных?


person Rajeev    schedule 27.11.2013    source источник


Ответы (2)


Я использую json4s (который использует lift-json под капотом):

import org.json4s.native.Serialization.write
import org.json4s.DefaultFormats

val a = Array(1,2,3,4,5)

implicit val formats = DefaultFormats
println(write(a))  // [1,2,3,4,5]

Он также может сериализовать более сложные значения:

case class Test(map: Map[String, Int], arr: Array[Int])
val t = Test(Map("one" -> 1, "two" -> 2), Array(1, 2, 3, 4, 5))
println(write(t))  // {"map":{"one":1,"two":2},"arr":[1,2,3,4,5]}
person John Landahl    schedule 27.11.2013

Вам просто нужно преобразовать массив в список, похоже, будто liftweb AST не определяет неявное преобразование для необработанных типов массивов... так что-то вроде этого:

scala> val array = Array(1,2,3,4,5)
scala>  val c = compact(JsonAST.render(array.toList))

(Обратите внимание, что добавление «toList») Работает нормально.

Надеюсь это поможет.

person Jonny Coombes    schedule 27.11.2013
comment
Есть ли в любом случае, который автоматически обнаружит и сериализует его. Будет полезно, если я дам любую структуру объекта с картой или массивом в качестве переменных-членов. Я не должен беспокоиться о том, что такое внутренняя структура. В конце концов, я должен получить строку json... можете ли вы дать какие-либо предложения в этом ракурсе? - person Rajeev; 27.11.2013