2016-07-11 16 views
0

私は次の文字列を持っている:は、JSON文字列にフィールドを見つけることができません

私は tagsを抽出し、文字列にこのフィールドを変換したい
val jsonString: String = """{"additionalProperties":{},"annotation":{"type":"getDetails","docId":"doi:10.1186-s13612-016-0045-3","tags":{"wellbeing":7,"mood":6,"memories":6,"tmr":3,"participants":3},"additionalProperties":{}}}""" 

。これは、私はそれがplayframeworkを使用して行う方法です。

val parsedJson = Json.parse(jsonString) 
val result = (parsedJson \ "tags").as[JsString].value 
System.out.println(result) 

このコードは、行val result = (parsedJson \ "tags").as[JsString].valueで立ち往生し、任意のエラーメッセージを返しません。私が間違っているのは何

  1. は、そのため私は2つの質問がありますか?私は取得したい"tags":{"wellbeing":7,"mood":6,"memories":6,"tmr":3,"participants":3}

  2. どのようにこのようなデッドロック状況を避けるには? (何らかの理由でフィールドが見つからない場合)

答えて

0

なぜコードがスタックしているのかわかりません。私の環境では、素晴らしいランタイム例外を提供します。プレイJSONで「\」演算子は、指定された名前のを見つけようとしていること

  1. 注:いずれの場合では、あなたは基本的にここに二つの問題を持っています。したがって、実際にannotationオブジェクトの一部である間に、<root>オブジェクトから「タグ」属性を取得しようとしています。したがって、それを抽出する:parsedJson \ "annotation" \ "tags"
  2. タグはJSONでオブジェクトとしてエンコードされます。 Play-jsonは可能な限り型の安全を目指しています。つまり、JsObjectJsStringに「キャスト」するだけでは意味がありません。ここでできることは、タグオブジェクトをJsObjectとして抽出し、そのtoString関数を使用することです。これはあなたを与えるだろう。目的の文字列にこれを変革

    {"wellbeing":7,"mood":6,"memories":6,"tmr":3,"participants":3}

    些細でなければなりません。

+0

タグオブジェクトをJsObjectとして抽出するにはどうすればよいですか?私はJsDefinedを取得します。 – Klue

+0

私のコメントは両方とも以下を使って解決できます: '(json \" annotation "\" tags ")。as [JsObject]'。 'as [JsObject]'部分は 'JsDefined'を' JsObject'に変換します – irundaia

関連する問題