2012-03-04 81 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)

在我的程序中,这导致二次计算,但我只需要线性。

是否可以使用for-comprehensions来匹配顶级id字段?

回答

1

我还没有深入研究不够深入弄清楚为什么默认的理解是递归的,但是你可以通过简单地资格搜索根本上解决这样的:

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

注意使用parent.children