Necesito construir una cadena JSON, algo como esto:
[
{ 'id': 1, 'name': 'John'},
{ 'id': 2, 'name': 'Dani'}
]
val jArray = JsArray();
jArray += (("id", "1"), ("name", "John"))
jArray += (("id", "2"), ("name", "Dani"))
println(jArray.dump)
Necesito poder agregar filas al jArray
, algo así comojArray += ...
¿Cuál es la biblioteca / solución más cercana a esto?
Respuestas:
Desafortunadamente, escribir una biblioteca JSON es la versión de la comunidad Scala de codificar una aplicación de lista de tareas pendientes.
Hay una gran variedad de alternativas. Los enumero en ningún orden en particular, con notas:
💣 = no ha corregido las vulnerabilidades de seguridad, § = tiene integración Scalaz, ± = admite interoperabilidad con Jackson
JsonNode
En Snowplow usamos json4s con el back-end de Jackson; También hemos tenido buenas experiencias con Argonaut.
fuente
Lift-json está en la versión 2.6 y funciona muy bien (y también es muy compatible, el mantenedor siempre está listo para corregir cualquier error que puedan encontrar los usuarios. Puede encontrar ejemplos usándolo en el repositorio de github
El mantenedor (Joni Freeman) siempre está disponible en la lista de correo de Lift . También hay otros usuarios en la lista de correo que también son muy útiles.
Como señala @Alexey, si desea usar la biblioteca con otra versión de Scala, diga
2.11.x
, cambiescalaVersion
y use de la%%
siguiente manera:Puede consultar el sitio liftweb.net para conocer la última versión a medida que pasa el tiempo.
fuente
Sugiero usar jerkson , es compatible con la mayoría de las conversiones de tipos básicas:
fuente
El número 7 en la lista es Jackson, sin usar Jerkson. Tiene soporte para objetos Scala, (clases de casos, etc.).
A continuación se muestra un ejemplo de cómo lo uso.
Esto lo hace muy simple. Además es el XmlSerializer y el soporte para las Anotaciones JAXB es muy útil.
Esta publicación de blog describe su uso con JAXB Annotations y Play Framework.
http://krasserm.blogspot.co.uk/2012/02/using-jaxb-for-xml-and-json-apis-in.html
Aquí está mi JacksonMapper actual.
fuente
Tal vez llegué un poco tarde, pero realmente deberías intentar usar la biblioteca json del marco de juego. Podrías mirar la documentación . En la versión 2.1.1 actual, no podría usarlo por separado sin el juego completo 2, por lo que la dependencia se verá así:
Te traerá un marco de juego completo con todas las cosas a bordo.
Pero como sé, los chicos de Typesafe tienen un plan para separarlo en la versión 2.2. Entonces, hay play-json independiente de 2.2-snapshot.
fuente
Deberías consultar a Genson . Simplemente funciona y es mucho más fácil de usar que la mayoría de las alternativas existentes en Scala. Es rápido, tiene muchas características e integraciones con algunas otras librerías (jodatime, json4s DOM api ...).
Todo eso sin ningún código sofisticado e innecesario como implicits, lectores / escritores personalizados para casos básicos, API no visible debido a la sobrecarga del operador ...
Usarlo es tan fácil como:
Descargo de responsabilidad: soy el autor de Gensons, pero eso no significa que no soy objetivo :)
fuente
Aquí hay una implementación básica de escritura y lectura de
json
archivos usandojson4s
.fuente
Jawn es una biblioteca de analizadores JSON muy flexible en Scala. También permite la generación de AST personalizados; solo necesita proporcionarle un pequeño rasgo para asignar al AST.
Funcionó muy bien para un proyecto reciente que necesitaba un poco de análisis JSON.
fuente
El éxtasis parece faltar en la lista de respuestas. Se puede obtener de http://rapture.io/ y le permite (entre otras cosas):
No quiero copiar / pegar ejemplos de Rapture desde su página. Jon Pretty dio una bonita presentación sobre las características de Rapture en SBTB 2014: https://www.youtube.com/watch?v=ka5-OLJgybI
fuente
Respuesta # 7 de @ AlaxDean, Argonaut es la única que pude trabajar rápidamente con sbt e intellij. En realidad, json4s también tomó poco tiempo, pero tratar con un AST sin procesar no es lo que quería. Puse a argonaut a trabajar poniendo una sola línea en mi build.st:
libraryDependencies += "io.argonaut" %% "argonaut" % "6.0.1"
Y luego una prueba simple para ver si podría obtener JSON:
Y entonces
Asegúrese de estar familiarizado con Option, que es solo un valor que también puede ser nulo (nulo seguro, supongo). Argonaut usa Scalaz, así que si ves algo que no entiendes como el símbolo
\/
(una operación), probablemente sea Scalaz.fuente
Puedes probar esto: https://github.com/momodi/Json4Scala
Es simple y solo tiene un archivo scala con menos de 300 líneas de código.
Hay muestras:
fuente
Uso uPickle, que tiene la gran ventaja de que manejará las clases de casos anidados automáticamente:
Agregue esto a su
build.sbt
para usar uPickle:fuente
Utilizo la biblioteca PLAY JSON, puedes encontrar el repositorio mavn solo para la biblioteca JSON, no para todo el marco aquí
Aquí hay disponibles muy buenos tutoriales sobre cómo usarlos:
http://mandubian.com/2012/09/08/unveiling-play-2-dot-1-json-api-part1-jspath-reads-combinators/
http://mandubian.com/2012/10/01/unveiling-play-2-dot-1-json-api-part2-writes-format-combinators/
http://mandubian.com/2012/10/29/unveiling-play-2-dot-1-json-api-part3-json-transformers/
fuente
Déjame darte también la versión HIJO de JSON :
fuente
Play lanzó su módulo para tratar con JSON independientemente de Play Framework, Play WS
Hice una publicación de blog sobre eso, échale un vistazo en http://pedrorijo.com/blog/scala-json/
Al usar las clases de casos y Play WS (ya incluidos en Play Framework), convierte las mayúsculas y minúsculas entre json y las clases de casos con una simple línea implícita
fuente