我有一个返回类型为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())))))]
我尝试了很多方法,但无法解决这个问题。
我做错了什么?
答案 0 :(得分:2)
好像你有错误的方法。 Json.toJson(value)
用于将Scala对象转换为JSON值。您错误地使用它来尝试读取JSON正文并将其转换为Scala对象。你可能想做这样的事情:
val foos : JsResult[List[Foo]] = result.validate[List[Foo]]
其中result是您的JSON值。
在'JsValue to a model'部分下看看这个:
答案 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} }。