在json数组中搜索特定属性

时间:2013-12-25 13:06:05

标签: javascript jquery json each

实际上我想在一个json数组中搜索一个属性的值。现在一个条件是该属性不会出现在数组的所有子节点中。这是我的json数组。

[{
      "heading1":"heading1",
      "heading2":"heading2",
      "heading3":"heading3",
      "heading4":"heading4",
      "heading5":"heading5",
      "heading6":"heading6"      
   },
   {
      "column1":65536,
      "column2":"school",
      "column3":"testing purpose",
      "column4":"DESKTOP",
      "column5":"ACTIVE",
      "column6":true,
      "column7":"a6cc82e0-a8d8-49b8-af62-cf8ca042c8bb"     

   },
   {
      "column1":98305,
      "column2":"Nikhil",
      "column3":"Test",
      "column4":"LAPTOP",
      "column5":"ACTIVE",
      "column6":true,
      "column7":"a6cc82e0-a8d8-49b8-af62-cf8ca042c8bb"

   }]

所以目前我正在使用每个循环但是像这样

var obj = $.parseJSON(JSON.stringify(response));
$.each(obj, function () {
    console.log("heading1", this['heading1']);
});

这里的响应来自mserver,它是json数组

现在我想知道我可以在json数组中搜索这个属性而不使用jQuery中的循环。

5 个答案:

答案 0 :(得分:2)

根据您的示例代码,我理解您拥有的是一个对象数组,并且您希望找到具有一个特定属性和/或值的对象:

如果对象具有属性

,则返回true
var results= arr.filter(function(item){ return item.hasOwnProperty("column5");  });

或者,当您找到该属性时,您可以执行其他操作:

arr.filter(function(item){ 
   if (item.hasOwnProperty("column5")) { 
        return item["column5"] === 'demo 01'; //or item.column5 === 'demo 01'
   } 
   return false;   
 });

答案 1 :(得分:1)

最好使用循环。但是如果JSON的格式是常规的,那么你可以使用regex来获取响应字符串中的值。

我不推荐这种方法,只是指出它存在。

var value = "heading1";
if( (new RegExp('"' + value + '"')).test(response) ){
     // Found value
};

在这里,我们获取所需的值,将其包装在引号中并在响应中搜索它。

这有几个问题,例如:

  1. 可能会在属性名称中找到模式
  2. 如果值可能包含正则表达式特殊字符,则需要转义。
  3. 如果您的JSON包含带有转义引号的值,则可能会因部分匹配而产生误报。
  4. 这就是为什么它取决于你知道数据的格式。

    编辑:

    您可以使用此条件而不是正则表达式来解决问题2。但它给你的灵活性较低。

    response.indexOf('"' + value + '"') !== -1
    

答案 2 :(得分:1)

您可以查看

var obj = $.parseJSON(response);

$.each(obj, function (index,value) {

if(typeof obj[index].heading2 !== "undefined")
{
    alert(obj[index].heading2);
}

当在数组元素的其他对象中找不到时,它返回undefined。你可以这样检查。

您可以查看此http://jsfiddle.net/gKRCH/

答案 3 :(得分:0)

试试这个,

$.each(object,function(key, value){
console.log(key);
console.log(value);
});

答案 4 :(得分:0)

你可以使用这个JS lib; DefiantJS(http://defiantjs.com)。此lib使用“搜索”方法扩展全局对象JSON - 您可以使用该方法对JSON结构执行XPath查询。就像你举例说明的那样。

使用XPath表达式(标准化查询语言),您可以找到您正在寻找的任何东西,DefiantJS将为您做繁重的工作 - 让您的代码整洁干净。

这是这段代码的小提琴:
http://jsfiddle.net/hbi99/q8xst/

以下是代码:

    var data = [
       {
          "heading1": "heading1",
          "heading2": "heading2",
          "heading3": "heading3",
          "heading4": "heading4",
          "heading5": "heading5",
          "heading6": "heading6"
       },
       {
          "column1": 65536,
          "column2": "school",
          "column3": "testing purpose",
          "column4": "DESKTOP",
          "column5": "ACTIVE",
          "column6": true,
          "column7": "a6cc82e0-a8d8-49b8-af62-cf8ca042c8bb"
       },
       {
          "column1": 98305,
          "column2": "Nikhil",
          "column3": "Test",
          "column4": "LAPTOP",
          "column5": "ACTIVE",
          "column6": true,
          "column7": "a6cc82e0-a8d8-49b8-af62-cf8ca042c8bb"
       }
    ],
    res = JSON.search( data, '//*[column4="DESKTOP"]' );

console.log( res[0].column2 );
// school