使用 json4s-jackson 解析 JObject 的键和值
Parsing JObject for key and values with json4s-jackson
如何获取列表中每个 JObject 的键 scenario0
和 scenario1
?
大便是:
poop: List[org.json4s.JsonAST.JValue] = List(JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))), JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))))
代码:
import org.json4s.jackson.JsonMethods._
import org.json4s._
implicit val formats = DefaultFormats
val json = parse("""
{
"address0": {
"scenario0": {
"street": "Bulevard",
"city": "Helsinki"
},
"scenario1": {
"street": "Bulevard",
"city": "Helsinki"
}
},
"address1": {
"scenario0": {
"street": "Bulevard",
"city": "Helsinki"
},
"scenario1": {
"street": "Bulevard",
"city": "Helsinki"
}
}
}""")
val poop = (json \ "address0").children
poop.foreach(p => {
})
你是说你想要这样吗,因为每个人都JObject
。
json.children.flatMap(_.children)
res13: List[JValue] = List(
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))),
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))),
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))),
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki))))
)
但是您可能会发现使用 circe、play-json 或 argonaut 等库将它们解析为案例 class 更有用。这样你就不必到处解析 json。
- 如果您需要值但没有固定架构:
val poop: Map[String, Any] = json.asInstanceOf[JObject].values
returns Map(address0 -> Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki)), address1 -> Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki)))
- 如果您需要值并且有固定的模式,那么 extracting of case class 可能会有用。
- 如果你需要 AST:
val poop = json.asInstanceOf[JObject].obj
给出 List[org.json4s.JsonAST.JField] = List((address0,JObject(List((scenario0,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki))))), (scenario1,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))))))), (address1,JObject(List((scenario0,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki))))), (scenario1,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))))))))
p.s。为了简单起见,我省略了监护人检查。
如何获取列表中每个 JObject 的键 scenario0
和 scenario1
?
大便是:
poop: List[org.json4s.JsonAST.JValue] = List(JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))), JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))))
代码:
import org.json4s.jackson.JsonMethods._
import org.json4s._
implicit val formats = DefaultFormats
val json = parse("""
{
"address0": {
"scenario0": {
"street": "Bulevard",
"city": "Helsinki"
},
"scenario1": {
"street": "Bulevard",
"city": "Helsinki"
}
},
"address1": {
"scenario0": {
"street": "Bulevard",
"city": "Helsinki"
},
"scenario1": {
"street": "Bulevard",
"city": "Helsinki"
}
}
}""")
val poop = (json \ "address0").children
poop.foreach(p => {
})
你是说你想要这样吗,因为每个人都JObject
。
json.children.flatMap(_.children)
res13: List[JValue] = List(
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))),
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))),
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))),
JObject(List((street,JString(Bulevard)), (city,JString(Helsinki))))
)
但是您可能会发现使用 circe、play-json 或 argonaut 等库将它们解析为案例 class 更有用。这样你就不必到处解析 json。
- 如果您需要值但没有固定架构:
val poop: Map[String, Any] = json.asInstanceOf[JObject].values
returnsMap(address0 -> Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki)), address1 -> Map(scenario0 -> Map(street -> Bulevard, city -> Helsinki), scenario1 -> Map(street -> Bulevard, city -> Helsinki)))
- 如果您需要值并且有固定的模式,那么 extracting of case class 可能会有用。
- 如果你需要 AST:
val poop = json.asInstanceOf[JObject].obj
给出List[org.json4s.JsonAST.JField] = List((address0,JObject(List((scenario0,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki))))), (scenario1,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))))))), (address1,JObject(List((scenario0,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki))))), (scenario1,JObject(List((street,JString(Bulevard)), (city,JString(Helsinki)))))))))
p.s。为了简单起见,我省略了监护人检查。