尝试将json数组解析为Scala中的List [Object]时的验证错误

时间:2017-07-27 19:42:46

标签: arrays json scala playframework

我有一个返回类型为Foo的JsArray的方法。

要处理回复,我正在执行以下操作:

val foos : List[Foo] = Json.toJson(result).as[List[Foo]]

在调试时,我可以看到结果是:

"[]"

它由代码生成:

Ok(Json.toJson(foos))

foos 列表[Foo]

但我收到错误:

  

[JsResultException:JsResultException(errors:List((,List(ValidationError(error.expected.jsarray,WrappedArray())))))]

我尝试了很多方法,但无法解决这个问题。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

好像你有错误的方法。 Json.toJson(value)用于将Scala对象转换为JSON值。您错误地使用它来尝试读取JSON正文并将其转换为Scala对象。你可能想做这样的事情:

val foos : JsResult[List[Foo]] = result.validate[List[Foo]]

其中result是您的JSON值。

在'JsValue to a model'部分下看看这个:

https://www.playframework.com/documentation/2.6.x/ScalaJson

答案 1 :(得分:2)

您最有可能寻找Json.parse,而不是Json.toJson

import play.api.libs.json.Json

scala> Json.toJson("[]")
res0: play.api.libs.json.JsValue = "[]"

scala> Json.parse("[]")
res1: play.api.libs.json.JsValue = []

尝试将res0转换为List[Foo]不起作用,因为您尝试转换字符串"[]"而不是使用不带引号的相同字符串{{1} }。