使用Jquery从JSON数组中检索值

时间:2014-05-28 16:14:06

标签: jquery

如果名称等于测试,是否可以打印罐头,瓶子和喷泉

任何人都可以帮助在if块中添加条件以匹配条件吗?

$.each(value, function (i, v) {
if(i.name=="Test")
{

}
});

来自以下JSON格式

[
    {
        "id": "0004",
        "name": "Test",
        "image": {
            "url": "images/0001.jpg",
            "width": 200,
            "height": 200
        },
        "Can": [
            "250ml",
            "300ml",
            "330ml",
            {
                "image": "images/0001.jpg"
            }
        ],
        "Bottle": [
            "350ml",
            "600ml",
            {
                "image": "images/0001.jpg"
            }
        ],
        "Fountain": [
            "small",
            "large",
            {
                "image": "images/0001.jpg"
            }
        ]
    }
]

2 个答案:

答案 0 :(得分:0)

您的JSON结构也是一个javascript对象。 您的对象有6个属性:“id”,“name”,“image”,“Can”,“Bottle”,“Fountain”。

您需要的是使用javascript内省并循环访问对象的属性,请参阅以下stackoverflow问题:

How to do JavaScript object introspection?

$(json).each(function() {
  if (this.name === "Test"){
    for(var propName in this) {
      if(typeof(obj[propName]) != "undefined") {
         console.log(propName);
      }
    }
  }
});

答案 1 :(得分:0)

为了直接回答问题,这是jsFiddle的一个简单示例。

// jquery Example
$(json).each(function() {
  if (this.name === "Test"){
    console.log(this.Can);
    console.log(this.Bottle);
    console.log(this.Fountain);
    $("#jQuery").append(JSON.stringify(this.Can)+"<br>");
    $("#jQuery").append(JSON.stringify(this.Bottle)+"<br>");
    $("#jQuery").append(JSON.stringify(this.Fountain)+"<br>");
  };
});

// pure JS example
for (i = 0; i < json.length; i++ ) {
  if (json[i].name === "Test"){
    console.log(json[i].Can);
    console.log(json[i].Bottle);
    console.log(json[i].Fountain);
    var out = document.getElementById("nojQueryResults");
    out.innerHTML = out.innerHTML + JSON.stringify(json[i].Can)+"<br>";
    out.innerHTML = out.innerHTML + JSON.stringify(json[i].Bottle)+"<br>";
    out.innerHTML = out.innerHTML + JSON.stringify(json[i].Fountain)+"<br>";
  };
};

// jquery Example iterate over all nodes when found
// json should be refactored to make an array in the found object 
// that contains only what you want to extract here. Say maybe a type: key
// otherwise you'll get everything in this /flat/ node
$(json).each(function() {
  if (this.name === "Test"){
    $(this).each(function() {
      console.log(this);
      $("#IterateAllChildNodes").append(JSON.stringify(this)+"<br>");
    })
  }
});



// pure JS example iterate over all nodes when found
// json should be refactored to make an array in the found object 
// that contains only what you want to extract here. Say maybe a type: key.
// otherwise you'll get everything in this /flat/ node
for (i = 0; i < json.length; i++ ) {
  if (json[i].name === "Test"){
    console.log(json[i]);
    var out = document.getElementById("NoJqueryIterateAllChildNodes");
    out.innerHTML = out.innerHTML + JSON.stringify(json[i])+"<br>";
  };
};

编辑我已经通过更多示例扩展了jsFiddle。纯JS和2个迭代遍历找到的节点中的所有节点,因为在评论中提到这些可能不是您正在寻找的仅有的三个项目。你的json并没有形成特定&#34;类型&#34;在你自己的节点中,所以你将获得/ found / node中的所有内容,除非你提供额外的排除逻辑,如果有一个额外的键/值被添加到这个节点,你必须稍后更新你不想输出。考虑添加type并将Can / Bottle / Fountain放入其中以进行迭代。