2012-03-06 204 views
2

这可能是一个noob问题,但我想知道是否有一种方法可以选择json对象而不必循环键值对。我用e4x做了类似的事情,但我不确定如何为js在语法上做到这一点。例如根据键值对选择json对象

var data = { "objects":[ 
       {"foo":"x","bar":"a"}, 
       {"foo":"y","bar":"b"} 
       ]} 

所以不是一个for循环,一些方法来声明

var someObject = data.objects[where objects.foo == x] 
+0

这不是JSON,这是反对的文字符号。 – 2012-03-06 19:32:09

+0

你错了。 JSON是对象文字符号的一个子集,事实上要求值对中的标识符只是字符串。 – FlavorScape 2012-03-06 20:22:04

回答

3

你可以做到这一点W/O 手动叠代的数据,但有些代码应该遍历无论如何对象(所以不期望在相当大的物体上闪电般的速度)。

有一个库为:jsonpath

+0

呃。我不喜欢图书馆。没有纯粹的方式,呃?猜猜我正在循环。 – FlavorScape 2012-03-07 16:27:44

+0

然后自己写。没什么特别的。啊,你可以从这里找到'findBy':http://travian.kirilloid.ru/js/array.js – kirilloid 2012-03-07 18:58:54

+0

看到jsonQ! https://github.com/s-yadav/jsonQ/ – FlavorScape 2015-02-25 21:32:26

0

这个问题在两年前有人问jsonQ之前。 jsonQ允许我们编写代码来查找兄弟,遍历树等,而无需在循环内编写一堆循环。虽然这个问题想要一种方式来找到它在本地JS,我认为我2岁的问题现在有点天真。我真的在寻找像jsonQ这样的库来避免编写一堆丑陋的循环(虽然我可以自己完成这项工作)。

0

问题是旧的,但可能这个答案可以帮助某人。

要选择列表中的项目,您可以使用JavaScript 过滤功能:

var data = { "objects":[ 
        {"foo":"x","bar":"a"}, 
        {"foo":"y","bar":"b"} 
       ]} 

var someobject = filterObject('x'); 

function filterObject(fooValue) { 
    return data.objects.filter(function(item) { 
     return item.foo == fooValue; 
    } 
}