soporta - Scala: Parse JSON directamente en una clase de caso
optimizacion de consultas sql (7)
Dado una cadena de JSON, y una clase de caso que le corresponde, ¿cuál es una forma sencilla de analizar el JSON en la clase de caso? Hay muchas bibliotecas disponibles, pero parece que Scala podría ahora hacerlo de la caja.
¿Qué pasa si el JSON debe analizarse en una lista de la clase de caso?
ACTUALIZAR:
Jerkson parece estar abandonado, y no quiero instalar todo el framework Play o Lift ni nada pesado.
En segundo lugar, la conversión de JSON en Play Framework.
También echa un vistazo a Jackson, que está maduro. Tenga en cuenta que deberá usar el Módulo Jackson Scala: https://github.com/FasterXML/jackson-module-scala .
Un artículo decente que proporciona una introducción; luego, un código para agregar conversiones implícitas: https://coderwall.com/p/o--apg/easy-json-un-marshalling-in-scala-with-jackson
Hay varios marcos que pueden hacer eso exactamente.
JSON4s
JSON4s es bastante maduro y admite jackson o un analizador JSON nativo . Lo usé en muchos proyectos para reemplazar a Jerkson.
https://github.com/json4s/json4s
play-json
Se puede usar sin la pila de juego completa. Gran soporte como parte del proyecto de juego en typesafe.
http://www.playframework.com/documentation/2.0/ScalaJson
Scala-Pickling
Un marco de serialización. Hay una opción para serializar / deserializar a JSON.
https://github.com/scala/pickling
Rocíe JSON
Puede catalogar y deserializar. Necesita saber la cantidad de argumentos para la deserialización difícil.
He usado https://github.com/json4s/json4s , solo que la queja hasta el momento es https://github.com/json4s/json4s/issues/137
import org.json4s._
import org.json4s.native.JsonMethods._
implicit val formats = DefaultFormats
case class ParsedPage(crawlDate: String, domain:String, url:String, text: String)
val js = """ {
"crawlDate": "20150226",
"domain": "0x20.be",
"url": "http://0x20.be/smw/index.php?title=99_Bottles_of_Beer&oldid=6214",
"text": "99 Bottles of Beer From Whitespace (Hackerspace Gent) Revision as of 14:43, 8 August 2012 by Hans ( Talk | contribs ) 99 Bottles of Beer Where: Loading map... Just me, with 99 bottles of beer and some friends. Subpages"
}"""
parse(js).extract[ParsedPage]
Para cualquier persona toparse con esto por primera vez, circe también es una buena opción
val customerJson = s"""{"id" : "1", "name" : "John Doe"}"""
case class Customer(id: String, name: String)
val customer = decode[Customer](customerJson)
Spray Json es muy liviano y hace exactamente lo que necesitas. Es un conjunto de herramientas en lugar de un marco completo y solo puede importar el proyecto Spray-json en lugar de todo el proyecto.
https://github.com/spray/spray-json
Los ejemplos pueden ayudarte a configurar muy rápidamente. La mayoría de las veces su código para traducir a / desde JSON termina siendo uno, pero tiene la capacidad de manejarlo explícitamente en caso de que tenga algunos requisitos extraños.
Use net.liftweb
import net.liftweb.json._
case class Detail(username:String, password:String)
implicit val formats = DefaultFormats
val input = parse(jsonString).extract[Detail]
println(input.username)
Asegúrese de que la versión de Scala coincida con el jar de lift-json. Por ej. para Scala 2.10 use lift-json_2.10.
Use spray-json ya que es pequeño.
import spray.json._
import DefaultJsonProtocol._
val json = """{"one" : "1", "two" : "2", "three" : "3"}""".parseJson
case class Numbers(one: String, two: String, three: String)
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val numbersFormat = jsonFormat3(Numbers)
}
import MyJsonProtocol._
val converted = json.convertTo[Numbers]
Descargue spray-json en sbt usando este build.sbt:
lazy val root = (project in file(".")). settings( name := "jsonExample", libraryDependencies += "io.spray" %% "spray-json" % "1.3.2" )