Нерекурсивное извлечение в Lift JSON для понимания - PullRequest
1 голос
/ 04 марта 2012

Я использую для понимания Lift JSON для анализа некоторых 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).

В моей программе это приводит к квадратичным вычислениям, хотя мне нужны только линейные.id только поля?

1 Ответ

1 голос
/ 04 марта 2012

Я не углубился достаточно глубоко, чтобы понять, почему понимание по умолчанию является рекурсивным, однако вы можете решить это, просто уточнив корень поиска:

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

Обратите внимание на использование parent.children .

...