无法在JSON字符串中找到该字段

时间:2016-07-11 14:46:45

标签: scala playframework

我有以下字符串:

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":{}}}"""

我想提取tags并将此字段转换为字符串。这就是我使用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. 我做错了什么?我想获得"tags":{"wellbeing":7,"mood":6,"memories":6,"tmr":3,"participants":3}
  2. 如何避免这种死锁情况? (即由于某种原因无法找到场地时)?

1 个答案:

答案 0 :(得分:0)

我不确定为什么你的代码卡住了。在我的环境中,它提供了一个很好的运行时异常。无论如何,你在这里基本上有两个问题:

  1. 请注意&#34; \&#34; play-json中的operator尝试查找具有指定名称的 child 。因此,您正在尝试获取&#34;标记&#34;属于<root>对象的属性,而它实际上是annotation对象的一部分。所以要提取它:parsedJson \ "annotation" \ "tags"
  2. 标记在JSON中编码为Object。 Play-json试图尽可能保持类型安全,这意味着你不能简单地“阉割”#34; JsObjectJsString。你可以在这里做的是将标签对象作为JsObject提取并使用其toString函数。这会给你:

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

    将其转换为所需的字符串应该是微不足道的。