值键不是play.api.libs.json.JsValue的成员

时间:2017-01-11 06:52:06

标签: json scala playframework

我试图从Scala中的JsValue类型的键中获取头部。我google了很多知道如何从JsValue类型获取头键。

最后,我发现 result.keys.head 是获取头键的方法,但它会抛出错误 值键不是play.api.libs.json.JsValue 的成员。

我的结果变量具有以下数据形式:

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

代码:

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)

result.keys.head 行,抛出错误。

我不确定,但我想,可能是我在这里做错了。

2 个答案:

答案 0 :(得分:1)

你想要得到什么?这不是处理play.api.Json个对象的方式。

.keys会产生Map,而不是JsValue。

查看文档:{​​{3}}

如果您想访问特定密钥(https://www.playframework.com/documentation/2.5.x/ScalaJson),请尝试:

result \ "keyName"

或用于递归搜索:

result \\ "keyName"

答案 1 :(得分:1)

Json.parse生成JsValue,它可以表示任何类型的json对象(布尔值,数字,数组等)。如果您知道自己正在使用某个对象,则可以使用.as[JsObject]

import play.api.libs.json._

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