2012-03-04 19 views
1

リフトJSONを使ってJSONを解析しています。 JSONは再帰的です(例:フィールドidが各レベルに存在します。ここでの例である:リフトJSONの非再帰的抽出

val json = """ 
{ 
    "id": 1 
    "children": [ 
    { 
     "id": 2 
    }, 
    { 
     "id": 3 
    } 
    ] 
} 
""" 

次のコード

var ids = for { 
    JObject(parent) <- parse(json) 
    JField("id", JInt(id)) <- parent 
} yield id 

println(ids) 

List(1, 2, 3)を生成します。私は製品List(1)にそれを期待していた。

私のプログラムでは、これは二次計算になりますが、私は線形が必要です。

トップレベルのidフィールドのみに一致するようにfor-comprehensionsを使用できますか?

答えて

1

私は、デフォルトの理解が再帰的である理由、しかし、あなたは、単にあなたの検索ルートを修飾することでこの問題を解決することができ見つけ出すのに十分な深掘り下げていない:

scala> for (JField("id", JInt(id)) <- parent.children) yield id 
res4: List[BigInt] = List(1) 

parent.childrenの使用を。