我正在读取HDFS序列文件,其中[Long,String]允许将每条记录作为消息调用。 message._2是一个json字符串,我正在尝试使用play json库解析它,但是当我这样做时会出现以下错误。
错误:
found : Seq[play.api.libs.json.JsValue]
required: String
代码:
val jsonString = message._2.toString();
val json = Json.parse(jsonString);
code = (json(0) \\ "code"); -- > Error is pointing to \\ on this line
答案 0 :(得分:1)
错误消息显示(json(0) \\ "code")
返回Seq[play.api.libs.json.JsValue]
,并且您尝试将此值分配给code
类型的变量String
。
所以,你可能想要这样做:
code = (json(0) \\ "code").head.as[String]
将获取列表的第一项并将JsValue
转换为String
。
<强>更新强>
正如@cchantep建议的那样,使用head
并不安全,因此为了更好的安全性,您可以使用headOption
执行此操作,但结果类型为Option[String]
:
val code: Option[String] =
(json \\ "code").headOption.map(_.as[String])
更安全的代码如下所示:
val code: Option[String] =
(json \\ "code").headOption.flatMap(_.asOpt[String])