解析する JSON: http://www.dota2.com/jsfeed/heropickerdata?v=18874723138974056&l=english
Hero クラスと JSON シリアライゼーション
case class Hero(
var id:Option[Int],
name: String,
bio: String,
var trueName:Option[String]
){}
implicit val modelReader: Reads[Hero] = Json.reads[Hero]
データの読み取り
val future: Future[play.api.libs.ws.Response] = WS.url("http://www.dota2.com/jsfeed/heropickerdata?v=18874723138974056&l=english").get()
val json = Json.parse(Await.result(future,5 seconds).body).as[Map[String, Hero]]
var i = 1
json.foreach(p => {
p._2.trueName = Some(p._1)
p._2.id = Some(i)
p._2.commitToDatabase
i += 1
})
各ヒーローのIDを取得する必要があります。json 内のヒーローの順序は、ID と一致します。明らかに、マップは順序付けられておらず、機能しません。他のアイデアはありますか?
LinkedHashMap を使用しようとしました。LinkedHashMap の暗黙的な Reads を作成しようとしましたが、失敗しました。これが答えだと思う人がいたら、アドバイスをお願いします。
「型scala.collection.mutable.LinkedHashMap [String、models.Hero]のJsonデシリアライザーが見つかりません。この型の暗黙的な読み取りまたはフォーマットを実装してみてください。」と言い続けます。読み込もうとしているファイルに特性をインポートしました。Reads の最後の行が問題であるというおかしな感じがあります。asInstanceOf を実行することはできないと思いますが、この読み取りを実行する方法について他にアイデアがありません。
LinkedHashMap 暗黙の読み取りコード: http://pastebin.com/cf5NpSCX