Play フレームワーク 2.3.4 を使用しています。API の 1 つからサードパーティ サービスへの 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
、トラバースする正しい方法ではありません。
何か案は?