我有简单的json:
{
"name": "John",
"placesVisited": [
{
"name": "Paris",
"data": {
"weather": "warm",
"date": "31/01/22"
}
},
{
"name": "New York",
"data": [
{
"weather": "warm",
"date": "31/01/21"
},
{
"weather": "cold",
"date": "28/01/21"
}
]
}
]
}
正如你在这个json中看到的,有一个placesVisited字段,如果name是“纽约”,那么“数据”字段就是一个List,如果name是“巴黎”,那么它就是一个对象。
我想做的是把placesVisited对象拉出来,其中“name”:“纽约”,然后我将它解析为一个case类,我不能对placesVisited中的两个对象使用这个case类,因为它们对同一个名称有不同的类型。
所以我的想法是这样的:
在这里我需要添加一些东西来给予我一个name为“纽约”的元素,我该怎么做呢?
我的结果应该是这样的:
{
"name": "New York",
"data": [
{
"weather": "warm",
"date": "31/01/21"
},
{
"weather": "cold",
"date": "28/01/21"
}
]
}
这样的事情可能会发生,但它的可怕哈哈:
(Json.parse(myjson) \ "placesVisited").as[List[JsObject]].find(item => {
item.value.get("name").toString.contains("New York")
}).getOrElse(throw Exception("could not find New York element")).as[NewYorkModel]
1条答案
按热度按时间luaexgnf1#
item.value.get("name").toString
可以稍微简化为(item \ "name").as[String]
,但除此之外没有太多改进。另一种选择是使用
case class Place(name: String, data: JsValue)
并按如下方式执行操作: