【发布时间】:2019-08-15 20:56:08
【问题描述】:
我的 JSON 看起来像:
{
"id": "id1",
"results": [
{
"exceed_size": "yes",
"rows_count": 1001,
"runtime_seconds": 0.02199999988079071,
"columns": [
"COL_1",
"COL_2",
"COL_3",
"COL_4",
"COL_5",
"COL_6",
"COL_7",
"COL_8",
"COL_9"
],
"columns_type": [
"number",
"string",
"string",
"string",
"number",
"time",
"time",
"number",
"string"
],
"limit": 1000,
"index": 0,
"rows": [
[
"9",
" C68894",
" ",
"",
"0",
"2018-05-02 03:13:00.0",
"2017-12-02 22:32:00.0",
"",
"Approved "
],
[
"65",
"325806 ",
"msm ",
" ",
"2",
"2018-05-02 03:13:00.0",
"2018-07-06 06:00:00.0",
"13",
"Approved "
],
...
]
},
...
]
}
我正在使用 Play Framework 提供的 JSON 库进行 JSON 解析。
如果您查看rows 值,它是JsArray 的JsArray 字符串值。我一直在尝试将rows 转换为案例类的对象列表,我的案例类如下所示:
case class Rows(col_1: String, col_2: String, ... , col_9: String)
我曾尝试做类似的事情:
val rows = (response \\ "rows").head.as[List[List[(String, String, ... , String)]]].flatten
尝试这种方式会引发错误,我确信这不会起作用。如何将这样的JsArray 转换为案例类的对象列表?
编辑 1:
正如@MilanRegmi 建议的那样,我试过了:
implicit val jsonFormat: Format[Rows] = Json.format[Rows]
val emails = (response \ "results" \ "rows").as[JsArray]
.value.map(j => j.validate[Rows].get)
尝试这样做的结果是:
Exception in thread "main" play.api.libs.json.JsResultException: JsResultException(errors:List((,List(JsonValidationError(List([{"exceed_size":"yes","rows_count":1001,"runtime_seconds":0.01600000075995922,"columns":["COL_1","COL_2","COL_3","COL_4","COL_5","COL_6","COL_7","COL_8","COL_9"],"columns_type":["number","string","string","string","number","time","time","number","string"],"limit":1000,"index":0,"rows":[["9"," C68894","","","0","2018-05-02 03:13:00.0","2017-12-02 22:32:00.0","","Approved "],["65","325806 ","msm "," ","2","2018-05-02 03:13:00.0","2018-07-06 06:00:00.0","13","Approved "],...]}] is not an object),WrappedArray())))))
at play.api.libs.json.JsReadable$$anonfun$2.apply(JsReadable.scala:25)
at play.api.libs.json.JsReadable$$anonfun$2.apply(JsReadable.scala:25)
at play.api.libs.json.JsError.fold(JsResult.scala:64)
at play.api.libs.json.JsReadable$class.as(JsReadable.scala:23)
at play.api.libs.json.JsUndefined.as(JsLookup.scala:181)
at com.cmdwldap.restapi.User.getEntitlementUserData(User.scala:150)
at com.cmdwldap.restapi.User$.main(User.scala:168)
at com.cmdwldap.restapi.User.main(User.scala)
PS:第150行对应提到val emails的地方。
【问题讨论】:
-
您在寻找这样的东西吗?
(Json.parse(jsonString) \ "results" \ 0 \ "rows").validate[List[List[String]]]
标签: scala playframework jsvalue