web-dev-qa-db-ja.com

ScalaでJSON文字列をJSONオブジェクトに変換する

{"Name":"abc", "age":10}などの単純なJSON文字列を対応するJSONオブジェクトに変換します(カスタムのScala "Person"などのオブジェクトではありません)。Does Scala StringをJSONオブジェクトに変換する組み込みメソッドをサポートしていますか?

複雑なJSON操作は一切行いません。文字列をJSONオブジェクトに変換するだけです。これを行う最も簡単な方法は何ですか?私はScalaを初めて使用するので、この質問が非常に基本的なものに聞こえるかどうかおifびします。

ありがとう。

16
drunkenfist

注:技術的には、JSONを解析するコアScala "ネイティブ"の方法はありません。 Spray JSONやPlay JSONなどの外部のサポートされているライブラリ。

Scala 2.11現在、パーサーコンビネーターライブラリはコア言語jarに含まれていないため、プロジェクトに個別に追加する必要があります。さらに、JSONパーサーはサポートされているコミュニティで非推奨になりました。 parser-combinatorライブラリのバージョンです。このライブラリの使用はお勧めしません。

Build.sbtに次を追加することにより、必要に応じてプロジェクトに追加できます。

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

ライブラリのソースコードは https://github.com/scala/scala-parser-combinators にあります。


JSON解析のためのScalaのネイティブ機能について具体的に尋ねたので、探しているパッケージはscala.utils.parsing.jsonです。次のようなものが機能するはずです。

_import scala.util.parsing.json._

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

parsedは次の値を取ります:Some(Map(Name -> abc, age -> 10.0))

20
DemetriKots

Spray JSON のようなライブラリを使用することもできます。 JSONとの間で変換するための多くの使いやすい機能を提供します。 Spray JSONを使用する場合は、次の操作を実行できます。

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

また、Json Libraryを play framework から使用できますが、スタンドアロンライブラリとしても使用できます。このライブラリは、優れているが放棄されている Jerkson プロジェクトに基づいています。これはScala超高速のラッパーJavaベースのJSONライブラリ、ジャクソン。そして、トランスフォーマー、バリデーターなど、JSONを操作するための非常に豊富で優れた文書化されたツールセットがあります。

import play.api.libs.json._

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

プレイせずにこのライブラリを使用するには、文字列でbuild.sbtにインストールするだけです

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

parseFullSome(Map)の項を返し、parseRawSome(JSONObject)の項を返します

import scala.util.parsing.json._

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

parsedはJSONObjectです

2