1

私はLiftJSONのfor-comprehensionsを使用してJSONを解析しています。JSONは再帰的であるため、たとえば、フィールドidは各レベルに存在します。次に例を示します。

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)

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

for-comprehensionsを使用してトップレベルのidフィールドのみに一致させることは可能ですか?

4

1 に答える 1

1

デフォルトの理解が再帰的である理由を理解するのに十分な深さを掘り下げていませんが、検索ルートを修飾するだけでこれを解決できます。

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

parent.childrenの使用に注意してください。

于 2012-03-04T16:47:09.253 に答える