如果另一个值,JSON获取值

时间:2014-07-11 15:42:56

标签: javascript json

好的,所以我的JSON就是这样的:

{
    "wares":[
      {
        "id":"1",
        "name":"apples",
        "stock":"40",
      },
      {
        "id":"2",
        "name":"pears",
        "stock":"40",
      },
      {
        "id":"3",
        "name":"bananas",
        "stock":"30",
      }
   ]
}

所以如果股票是40,我想获得名称,我已经使用此代码作为示例,我在此处找到:http://techslides.com/how-to-parse-and-search-json-in-javascript/

function getObjects(obj, key, val) {
    var objects = [];
    for (var i in obj) {
        if (!obj.hasOwnProperty(i)) continue;
        if (typeof obj[i] == 'object') {
            objects = objects.concat(getObjects(obj[i], key, val));    
        } else 
        //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not)
        if (i == key && obj[i] == val || i == key && val == '') { //
            objects.push(obj);
        } else if (obj[i] == val && key == ''){
            //only add if the object is not already in the array
            if (objects.lastIndexOf(obj) == -1){
                objects.push(obj);
            }
        }
    }
    return objects;
}

哪个有效,但如果股票是40,我还没有办法找回这个名字。

我原以为你在名为ret(return)的函数中添加了一个额外的值,就像它应该返回的那样。

的内容
alert(JSON.stringify(getObjects(JSON, 'stock', '40', 'name')));

非常感谢!

2 个答案:

答案 0 :(得分:1)

使用原生filter()map()方法的替代解决方案:

function getObjects(_object, _key, _value, _return) {
  return _object.filter(function(_item) {
    return _item[_key] == _value;
  }).map(function(_item) {
    return _item[_return];
  });
}

请注意,在上面的调用中,我们需要传递包含项的数组,而不是根对象。 或者您可以修改上述内容以接受根对象

你称之为:

getObjects(obj.wares, 'stock', 40, 'name');

返回["apples", "pears"]

答案 1 :(得分:0)

试试这个!

$.each(getObjects(JSON, "stock", "40"), function() {
    alert(this.name);
})

编辑:为了解释我写的内容,getObjects函数返回所有符合搜索条件的对象,所以我所做的就是获取所有返回的JSONS的每个名称