搜索JSON对象数组

时间:2011-06-21 15:27:03

标签: javascript jquery json

我不确定如何在给定此JSON对象数组的情况下完成此操作:

var stuff = [
  {
    'Address' : '123 Street',
    'Name'    : 'From'
  },
  {
    'Address' : '456 Avenue',
    'Name'    : 'To'
  }
]

所以我希望能够做的是根据其中一个属性(在本例中为“Name”)查询此对象数组,并返回与查询匹配的整个对象。

无论如何使用jquery或只是常规的javascript来执行此操作?

例如,我想返回名称==='从'

的整个对象

5 个答案:

答案 0 :(得分:5)

function findStuff(jsonobject, propertyToFind, valueToFind)
{
    for (var i = 0; i < jsonobject.length; i++) {
        if (jsonobject[i][propertyToFind] === valueToFind)
           return jsonobject[i];
    }
    return null;
}

答案 1 :(得分:1)

for(var i=0; i<stuff.length; i++){
    var item = stuff[i];
    if(item.Name=='From')
       ....
}

答案 2 :(得分:1)

function findByName(ary,name){
    for (var a = 0; a < ary.length; a++){
        if (ary[a].Name == name)
            return stuff[a];
    }
    return {};
}

var match = findByName(stuff,'From');

使用循环遍历对象。使用对象上的.Name来读取JSON对象的属性值。

答案 3 :(得分:1)

$.each('stuff', function(key,value)
{
    if (key == 'Name' && value == 'From')
    {
         alert('got it!');
    }
});

答案 4 :(得分:0)

您可以使用此JS库 - DefiantJS(defiantjs.com),而不是编写自定义函数。其中使用“搜索”方法扩展了全局对象JSON。使用此方法,您可以使用XPath表达式搜索JSON结构,它将返回带有匹配项的数组(如果未找到匹配项,则返回空数组)。

    var stuff = [
       {
          "Address": "123 Street",
          "Name": "From"
       },
       {
          "Address": "456 Avenue",
          "Name": "To"
       }
    ],
    res = JSON.search( stuff, '//*[Name = "From"]' );

console.log( res[0].Address );
// 123 Street

这是一个工作小提琴:
http://jsfiddle.net/hbi99/4H57C/