我想为这样的Json写一个Json读者
{
"headers": [
{
"id": "time:monthly",
"type": "a"
},
{
"id": "Value1",
"type": "b"
},
{
"id": "Value2",
"type": "b"
}
],
"rows": [
[
"2013-01",
4,
5
],
[
"2013-02",
3,
6
]
]
}
我知道(感谢标题)在行元素中,第一个元素是a
类型,第二个元素和第三个元素类型为b
。我的目标是创建一个对象行(List[a],List[b])
(
类型a和b的元素数量因我使用List
)而异。
我的问题是我如何解析行或如何读取具有不同类型的对象和没有ID的Json数组?
答案 0 :(得分:0)
我很想设置带有案例类的模型,并将播放框架宏基json阅读器与您的行的自定义混合使用。
import play.api.libs.json._
case class Header(id: String, `type`: String)
case class Row(a: String, b: Int, c: Int)
case class Data(headers: Seq[Header], rows: Seq[Row])
object RowReads extends Reads[Row] {
def reads(js: JsValue) = js match {
case JsArray(Seq(a,b,c)) =>
(a,b,c) match {
case (a: JsString, b: JsNumber, c: JsNumber) =>
JsSuccess(Row(a.value,b.value.toInt,c.value.toInt))
case _ => JsError("nope")
}
case _ => JsError("nope")
}
}
object Formats {
implicit val headerReads = Json.reads[Header]
implicit val rowReads = RowReads
implicit val dataReads = Json.reads[Data]
def readIt(js: JsValue) = {
Json.fromJson[Data](js: JsValue)
}
}
了解更多详情。 https://playframework.com/documentation/2.4.x/ScalaJson