2017-01-11 16 views
0

私はScalaのJsValueタイプのキーから頭を取得しようとしています。私は、JsValueタイプからヘッドキーを取得する方法を知るために多くのことを尋ねました。value keysはplay.api.libs.json.JsValueのメンバーではありません

最後に、私はresult.keys.headがヘッドキーを取得する方法であることがわかったが、それはエラー値キーをスローはplay.api.libs.json.JsValueのメンバーではありません

そして、私の結果変数は、データの下のフォームがあります。

{ 
    "intents": [{ 
     "intent": "feeling", 
     "confidence": 0.1018563217175903 
    }], 
    "entities": [], 
    "input": { 
     "text": "{reset-encounter}" 
    }, 
    "output": "Good" 
} 

はコード:result.keys.headラインで

import play.api.libs.json._ 
val jsonStr = """ 
{ 
     "intents": [{ 
      "intent": "feeling", 
      "confidence": 0.1018563217175903 
     }], 
     "entities": [], 
     "input": { 
      "text": "{reset-encounter}" 
     }, 
     "output": "Good" 
    } 
""" 
val result = Json.parse(jsonStr) 
println("key: ", result.keys.head) 

は、エラーがスローされます。

私は確信していませんが、私はここで何か間違っていると思います。

+0

はエラー –

+0

@AlvaroCarrascoを生産している実際のコードを投稿してください。コードをご覧ください。 – iNikkz

+2

'JsValue'は実際に' keys'を持っていません。 'JsObject'はそうです。それを 'JsObject'に変換する必要があります。 - 'result.asInstanceOf [JsObject] .keys.head'。 –

答えて

0

Json.parseを生成しますJsValueは、任意の種類のjsonオブジェクト(ブール値、数値、配列など)を表すことができます。あなたがオブジェクトで作業しているわかっている場合は、.as[JsObject]を使用することができます。ありがとう:

import play.api.libs.json._ 

val result = Json.parse(jsonStr).as[JsObject] 
println("key: " + result.keys.head) 
1

何を取得しようとしていますか?それはplay.api.Jsonオブジェクトを処理する方法ではありません。

.keysはMapになりますが、JsValueでは発生しません。

は、マニュアルを参照してください:https://www.playframework.com/documentation/2.5.x/ScalaJson

あなたが特定のキー(https://www.playframework.com/documentation/2.5.x/ScalaJson#Traversing-a-JsValue-structure)にアクセスしたい場合は、試してみてください:

result \ "keyName" 

や再帰的な検索のために:

result \\ "keyName" 
+0

jsonオブジェクトをドメインにモデル化する場合(ケースクラス)http://pedrorijo.com/blog/scala-json/およびhttp://pedrorijo.com/blog/scala-json-part2/ – pedrorijo91

+0

@ Sarvesh Kumar Singh、Json Objectは** keys **を持っていますが、JsValueはそうではありません。私がJson Objectのキーについて知らないとしたら、それらを得るために**キーが必要です。 – iNikkz

関連する問題