web-dev-qa-db-fra.com

Conversion d'une chaîne JSON en un objet JSON dans Scala

Je souhaite convertir une simple chaîne JSON telle que {"Name":"abc", "age":10} à l'objet JSON correspondant (pas un objet personnalisé Scala tel que "Person"). Est-ce que Scala prend en charge toutes les méthodes intégrées pour convertir une chaîne) à un objet JSON?

Je ne vais pas avoir d'opérations JSON complexes. J'ai juste besoin de convertir la chaîne en un objet JSON. Quelle est la manière la plus simple de procéder? Je suis nouveau à Scala, donc je m'excuse si cette question semble très basique.

Merci.

16
drunkenfist

Remarque: Techniquement, il n'y a plus de noyau Scala façon "native" d'analyser JSON. Vous devez utiliser un bibliothèque externe prise en charge comme Spray JSON ou Play JSON.

À partir de Scala 2.11, la bibliothèque d'analyseur-combinateur n'est plus incluse dans le jar du langage principal et doit être ajoutée séparément à votre projet. De plus, l'analyseur JSON est depuis déconseillé dans la communauté prise en charge version de la bibliothèque analyseur-combinateur. Je ne recommanderais pas d'utiliser cette bibliothèque.

Vous pouvez toujours l'ajouter à votre projet, si vous le souhaitez, en ajoutant ce qui suit à votre build.sbt:

libraryDependencies += "org.scala-lang.modules" %% "scala-parser-combinators" % "1.0.4"

Vous pouvez trouver le code source de la bibliothèque à https://github.com/scala/scala-parser-combinators .


Puisque vous avez posé des questions spécifiques sur les fonctionnalités natives de Scala pour l'analyse JSON - le package que vous recherchez est le scala.utils.parsing.json. Quelque chose comme ce qui suit devrait fonctionner:

import scala.util.parsing.json._

val parsed = JSON.parseFull("""{"Name":"abc", "age":10}""")

parsed prendra la valeur: Some(Map(Name -> abc, age -> 10.0))

20
DemetriKots

Vous voudrez peut-être utiliser une bibliothèque comme Spray JSON . Il fournit de nombreuses fonctionnalités faciles à utiliser pour la conversion vers et depuis JSON. Si vous décidez d'utiliser Spray JSON, vous pouvez le faire:

import spray.json._
// some code here
val json = "your json string here".parseJson
8
Denis Rosca

Vous pouvez également utiliser la bibliothèque Json depuis play framework , mais vous pouvez également l'utiliser comme bibliothèque autonome. Cette bibliothèque basée sur un projet bon mais abandonné Jerkson , qui est un wrapper Scala autour de la bibliothèque JSON ultra-rapide Java basée sur JSON, Jackson. Et il a un ensemble d'outils très riche et bien documenté pour travailler avec JSON - transofrmers, validateurs et etc.

import play.api.libs.json._

val json: JsValue = Json.parse("""{"a":1}""")

Pour utiliser cette bibliothèque sans jouer, installez-la simplement dans build.sbt avec une chaîne

libraryDependencies += "com.typesafe.play" %% "play-json" % "2.3.0"
6
Oleg

parseFull renvoie en termes de Some(Map), parseRaw renvoie en termes de Some(JSONObject)

import scala.util.parsing.json._

val parsed = JSON.parseRaw("""{"Name":"abc", "age":10}""").getOrElse(yourDefault)

parsed est le JSONObject

2
Guda uma shanker