我们正在使用 Play 框架 2.3.4。我们从其中一个 API 对第三方服务进行 Web 服务调用 - 返回响应的结构是动态的并且可能会发生变化。只有响应 JSON 中的静态子结构是特定元素并嵌套在其中。例如
{
"response":
{
"someElement1": "",
"element2": true,
"buckets": [
{
"key": "keyvalue",
"docCount": 10,
"somethingElse": {
"buckets": [
{
"key": "keyvalue1",
"docCount": 5,
"somethingElseChild": {
"buckets": [
{
"key": "Tan",
"docCount": 1
}
]
}
},
{
"key": "keyvalue2",
"docCount": 3,
"somethingElseChild": {
"buckets": [
{
"key": "Ban",
"docCount": 6
}
]
}
}
]
}
}
]
}
}
我们不知道响应结构会是什么样子,但我们唯一知道的是响应中的某处会有“桶”嵌套元素,并且您可以看到顶层内还有其他嵌套的“桶”“桶”元素。另请注意,buckets
数组内部的结构也不清楚,如果会有另一个子存储桶,则肯定子存储桶必须位于父存储桶内的某个bucket
位置 - 这样模式是一致的。
解析这种递归结构并递归填充以下Bucket
类的最佳方法是什么?
case class Bucket(key:String,docCount, subBuckets: List[Bucket] )
首先我想
val json = Json.parse(serviveResponse)
val buckets = (json \ "response" \\ "buckets")
但这不会带来buckets
递归而不是正确的遍历方式。
有任何想法吗?