2015-06-17 28 views
10

Chcę przekonwertować prosty ciąg JSON, taki jak {"Name":"abc", "age":10}, na odpowiedni obiekt JSON (a nie niestandardowy obiekt Scala, taki jak "Person"). Czy Scala obsługuje wszelkie wbudowane metody konwersji Stringa na obiekt JSON?Konwertowanie ciągu znaków JSON na obiekt JSON w Scala

Nie będę mieć żadnych skomplikowanych operacji JSON. Po prostu muszę przekonwertować ciąg na obiekt JSON. Jaki jest najprostszy sposób to zrobić? Jestem nowy w Scali, więc przepraszam, jeśli to pytanie brzmi bardzo prosto.

Dzięki.

+0

Istnieje wiele lib JSON w Scala. Każdy z nich udostępnia funkcję parsowania, aby uzyskać wartość JSON z ciągu. Najpierw musisz wybrać lib (Graj JSON, Argonaut, ...). – cchantep

+0

@caintep Thx, ale chciałem w miarę możliwości unikać korzystania z biblioteki zewnętrznej. Dlatego chciałem się dowiedzieć, czy Scala ma jakieś wbudowane wsparcie. Chyba będę musiał wtedy użyć biblioteki. – drunkenfist

Odpowiedz

5

Możesz chcieć użyć biblioteki takiej jak Spray JSON. Zapewnia wiele łatwych w użyciu funkcji do konwersji do iz JSON. Jeśli użytkownik zdecyduje się użyć JSON Spray można to zrobić:

import spray.json._ 
// some code here 
val json = "your json string here".parseJson 
3

Ponadto można skorzystać z biblioteki json play framework, ale może być stosowany również jako samodzielne lib. Ta biblioteka oparta jest na dobrym, ale porzuconym projekcie Jerkson, który jest opakowaniem Scala wokół superszybkiej biblioteki JSON opartej na Javie, Jackson. I ma bardzo bogatą i dobrze udokumentowany zestaw narzędzi do pracy z JSON - transofrmers, weryfikatorów i itp

import play.api.libs.json._ 

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

Do użycia tej lib bez luzu wystarczy zainstalować go w build.sbt sznurkiem

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

Od zapytałeś konkretnie o natywne możliwości Scali do parsowania JSON - pakiet, którego szukasz, to scala.utils.parsing.json. Coś jak poniżej powinno działać:

import scala.util.parsing.json._ 

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

parsed odbędzie się na wartości: Some(Map(Name -> abc, age -> 10.0))


Uwaga: jak Scala 2.11 biblioteki parser-syntezatora nie jest już wliczone w języku rdzeniowej jar i należy go dodać osobno do projektu. Można go dodać do projektu poprzez dodanie następujących do build.sbt:

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

można znaleźć kod źródłowy biblioteki w https://github.com/scala/scala-parser-combinators.

Jak wielu zauważyło, istnieją zewnętrzne biblioteki, które są ogólnie lepsze niż te, które są natywne w Scali. Osobiście używam Play JSON.

1

W parseFull powraca w-warunkach Some(Map), parseRaw powraca w kategoriach Some(JSONObject)

import scala.util.parsing.json._ 

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

parsed jest JSONObject