[英]play framework json lookup inside array
我有簡單的 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 字段,如果名稱是“紐約”,則“數據”字段是一個列表,如果名稱是“巴黎”,則它是一個 object。
我想要做的是拉出 placesVisited object where "name": "New York" 然后我將它解析為一個案例 class 我有,我不能將這個案例 class 用於 placesVisited 中的兩個對象因為它們有差異類型相同的名稱。
所以我想做的是:
(myJson \ "placesVisited")
並且在這里我需要添加一些東西來給我名稱為“New York”的元素,我該怎么做?
我的結果應該是這樣的:
{
"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]
item.value.get("name").toString
可以略微簡化為(item \ "name").as[String]
但除此之外沒有太多可以改進的地方。
另一種選擇是使用case class Place(name: String, data: JsValue)
並像這樣:
(Json.parse(myjson) \ "placesVisited")
.as[List[Place]]
.find(_.name == "New York")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.