我有一些JSON来自我无法控制的外部API。在JSON的一部分被划成这样:如何将JSON字段转换为Scala Play框架2中的Seq?
{
"room_0": {
"area_sq_ft": 151.2
},
"room_1": {
"area_sq_ft": 200.0
}
}
而不是使用数组像他们应该拥有的,他们使用room_n一个关键要素的n个。不再创建room_0,room_1,room_2等的情况下类,我想将其转换为一个序列[房间]其中,这是我的房间的情况下类:
case class Room(area: Double)
我使用读取play.api.libs.json
转换JSON的其他部分转换为大小写类,并且倾向于使用Reads进行此转换。我怎么能做到这一点?
这是我试过的。
val sqFtReads = (__ \ "size_sq_ft").read[Double]
val roomReads = (__ \ "size_sq_ft").read[Seq[Room]](sqFtReads).map(Room)
cmd19.sc:1: overloaded method value read with alternatives:
(t: Seq[$sess.cmd17.Room])play.api.libs.json.Reads[Seq[$sess.cmd17.Room]] <and>
(implicit r: play.api.libs.json.Reads[Seq[$sess.cmd17.Room]])play.api.libs.json.Reads[Seq[$sess.cmd17.Room]]
cannot be applied to (play.api.libs.json.Reads[Double])
val roomReads = (__ \ "size_sq_ft").read[Seq[Room]](sqFtReads).map(Room)
您是否阅读过[documentation](https://www.playframework.com/documentation/2.5.x/ScalaJson)?你有什么尝试? – cchantep
@cchantep是的,我已经过了几次文档,但我没有看到任何帮助我处理这个用例的东西。 –
首先,JSON示例不是一个数组(对应于Scala集合,例如'Seq'),而是一个带有“room_0”和“room_1”键的词典。那么你最好看看Play JSON宏来定义一个'Reads [Room]'。 – cchantep