JSONの文字列とそれに対応するケースクラスが与えられた場合、JSONをケースクラスに解析する簡単な方法は何ですか?利用可能なライブラリは多数ありますが、Scalaはすぐにこれを実行できるようです。
JSONをケースクラスのリストに解析する必要がある場合はどうでしょうか。
更新:
Jerksonは放棄されたようです。完全なPlayまたはLiftフレームワーク、または他の重いものをインストールしたくありません。
それを正確に行えるフレームワークがいくつかあります。
circe
今日はたくさん使いました。多くの素晴らしい機能。猫を引き込みます。
https://circe.github.io/circe/https://github.com/circe/circe
JSON4s
JSON4sは非常に成熟しており、jacksonまたはnativeJSON-Parserをサポートしています。 jerksonを置き換えるために多くのプロジェクトで使用しました。
https://github.com/json4s/json4s
play-json
完全なプレイスタックなしで使用できます。 typesafeでのplayプロジェクトの一部としての素晴らしいサポート。
http://www.playframework.com/documentation/2.0/ScalaJson
Scala-Pickling
シリアル化フレームワーク。 JSONにシリアライズ/デシリアライズするオプションがあります。
https://github.com/scala/pickling
JSONをスプレー
シリアル化および逆シリアル化できます。直列化復元が困難なため、引数の数を知る必要があります。
私は使用しました https://github.com/json4s/json4s 、これまでのところ不満は 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]
初めてこれにぶつかった人にとっては、 circe も良いオプションです
val customerJson = s"""{"id" : "1", "name" : "John Doe"}"""
case class Customer(id: String, name: String)
val customer = decode[Customer](customerJson)
小さいのでspray-jsonを使用してください。
_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]
_
このbuild.sbtを使用してSpray-jsonをsbtにダウンロードします。
lazy val root = (project in file(".")). settings( name := "jsonExample", libraryDependencies += "io.spray" %% "spray-json" % "1.3.2" )
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)
Scalaバージョンがlift-json jarと一致することを確認してください。たとえば、Scala 2.10にはlift-json_2.10。を使用してください。
スプレーJsonはかなり軽量で、まさに必要なことを行います。これは完全なフレームワークではなくツールキットであり、プロジェクト全体ではなくSpray-jsonプロジェクトをインポートするだけです。
https://github.com/spray/spray-json
これらの例により、非常に迅速にセットアップできます。ほとんどの場合、JSONとの間で変換するコードは1つのライナーになりますが、奇妙な要件がある場合には明示的に処理することができます。
次に、Play FrameworkでJSON変換を行います。
成熟したジャクソンも見てください。 Jackson Scala Module: https://github.com/FasterXML/jackson-module-scala を使用する必要があることに注意してください。
イントロを提供するまともな記事-暗黙的な変換を追加するコード: https://coderwall.com/p/o--apg/easy-json-un-marshalling-in-scala-with-jackson