Jquery JSON-嵌套数据上的迭代

Jquery JSON-嵌套数据上的迭代,jquery,json,Jquery,Json,我有一个JSON文件,其结构如下: {"products":[ { "tvs":[ {"samsung":[ {"leds":[ { "product_id": "034567", "product_name": "Samsung UA22F5100 22'' LED TV (Black)", "model_no":

我有一个JSON文件,其结构如下:

{"products":[
    { "tvs":[
        {"samsung":[
            {"leds":[
                {
                 "product_id": "034567",
                 "product_name": "Samsung UA22F5100 22'' LED TV (Black)",
                 "model_no": "UA22F5100",
                 "brand": "Samsung",
                 "price": 399,
                 "screen_size": 22,
                 "screen_res": "1920 x 1080",
                 "usb": 1,
                 "hdmi": 1,
                 "screen_format": "LED",
                 "dimensions": "513.1 x 366.5 x 169.6",
                 "manuf_guarantee": "1 year"                  
                },
                {
                 "product_id": "012468",
                 "product_name": "Samsung 23F4003 23'' LED TV (Black)",
                 "model_no": "23F4003",
                 "brand": "Samsung",
                 "price": 459,
                 "screen_size": 23,
                 "screen_res": "1366 x 768 pixels",
                 "usb": 1,
                 "hdmi": 1,
                 "screen_format": "LED",
                 "dimensions": "551.9 x 368.4 x 123.4",
                 "manuf_guarantee": "1 year"                
                }
        ]},
        {"plasma":[
            {
             "product_id": "043291",
             "product_name": "Samsung 43F4100 43'' Plasma TV (Black)",
             "model_no": "43F4100",
             "brand": "Samsung",
             "price": 399,
             "screen_size": 43,
             "screen_res": "852 x 480",
             "usb": 2,
             "hdmi": 2,
             "screen_format": "Plasma",
             "dimensions": "1007.4 x 670.5 x 261.9",
             "manuf_guarantee": "1 year"                 
           },
                etc...
在从ajax请求检索结果之后,我需要对其进行迭代。我需要过滤数据,例如,只获取
led'
对象。 过滤的最佳方式是什么: 我应该使用
jquery的.each()
,还是在
循环中使用

我试图使用.each()方法对其进行迭代,但我遇到了需要检查当前对象是
'led'
还是
'plasma'
的问题

另一方面,如果我对(obj中的var x)使用
,我可以通过'x'访问对象的名称


那么,我应该使用
for in
循环来完成吗?我到底要怎么做

假设数据包含json

data.each(function(index, product) {
   product.each(function(index, tv) {
      tv.each(function(index, mark) {
         mark.each(function(index, type) {
            if (type=='leds') {
               // Do whatever you want ...
            }
         });
      });
   });
});
编辑:完全使用AJAX调用

var obj = {};
obj.my_post_value = my_post_value;

var str = jQuery.param(obj);

$.ajax({
    type: "POST",
    url: 'my_url',
    dataType: 'json',
    data: str,
    success: function (data) {
        // handle your successful stuff here
        data.each(function(index, product) {
           product.each(function(index, tv) {
              tv.each(function(index, mark) {
                 mark.each(function(index, type) {
                    if (type=='leds') {
                       // Do whatever you want ...
                    }
                 });
              });
           });
        });
    },
    error: function (data) {
        // handle your unsuccessful stuff here
    }
});

这是来自本机javascript的解决方案

<html>
<script>
var jsonArray = {"products":[
    { "tvs":[
        {"samsung":[
            {"leds":[
                {
                 "product_id": "034567",
                 "product_name": "Samsung UA22F5100 22'' LED TV (Black)",
                 "model_no": "UA22F5100",
                 "brand": "Samsung",
                 "price": 399,
                 "screen_size": 22,
                 "screen_res": "1920 x 1080",
                 "usb": 1,
                 "hdmi": 1,
                 "screen_format": "LED",
                 "dimensions": "513.1 x 366.5 x 169.6",
                 "manuf_guarantee": "1 year"                  
                },
                {
                 "product_id": "012468",
                 "product_name": "Samsung 23F4003 23'' LED TV (Black)",
                 "model_no": "23F4003",
                 "brand": "Samsung",
                 "price": 459,
                 "screen_size": 23,
                 "screen_res": "1366 x 768 pixels",
                 "usb": 1,
                 "hdmi": 1,
                 "screen_format": "LED",
                 "dimensions": "551.9 x 368.4 x 123.4",
                 "manuf_guarantee": "1 year"                
                }
        ]},
        {"plasma":[
                {
                 "product_id": "043291",
                 "product_name": "Samsung 43F4100 43'' Plasma TV (Black)",
                 "model_no": "43F4100",
                 "brand": "Samsung",
                 "price": 399,
                 "screen_size": 43,
                 "screen_res": "852 x 480",
                 "usb": 2,
                 "hdmi": 2,
                 "screen_format": "Plasma",
                 "dimensions": "1007.4 x 670.5 x 261.9",
                 "manuf_guarantee": "1 year"                 
               }
           ]
        }
        ]
}]
}]
};      

var brand = "samsung"; //I assume that you know, how to get this based on your design
var type = "leds"; //I assume that you know, how to get this based on your design

var typeArray = eval("jsonArray.products[0].tvs[0]."+brand+"[0]."+type);
if(typeArray .length){
    for(var i=0; i<typeArray .length; i++){
        var product_id = typeArray [i].product_id;
        alert(product_id);
    }
}
</script>
<body>                       
</body>
</html>

var jsonArray={“产品”:[
{“电视”:[
{“三星”:[
{“发光二极管”:[
{
“产品id”:“034567”,
“产品名称”:“三星UA22F5100 22英寸LED电视(黑色)”,
“型号号”:“UA22F5100”,
“品牌”:“三星”,
“价格”:399,
“屏幕大小”:22,
“屏幕分辨率”:“1920 x 1080”,
“usb”:1,
“hdmi”:1,
“屏幕格式”:“LED”,
“尺寸”:“513.1 x 366.5 x 169.6”,
“制造保证”:“1年”
},
{
“产品id”:“012468”,
“产品名称”:“三星23F40033”LED电视(黑色)”,
“型号号”:“23F4003”,
“品牌”:“三星”,
“价格”:459,
“屏幕大小”:23,
“屏幕分辨率”:“1366 x 768像素”,
“usb”:1,
“hdmi”:1,
“屏幕格式”:“LED”,
“尺寸”:“551.9 x 368.4 x 123.4”,
“制造保证”:“1年”
}
]},
{“等离子”:[
{
“产品id”:“043291”,
“产品名称”:“三星43F4100 43”等离子电视(黑色),
“型号号”:“43F4100”,
“品牌”:“三星”,
“价格”:399,
“屏幕大小”:43,
“屏幕分辨率”:“852 x 480”,
“usb”:2,
“hdmi”:2,
“屏幕格式”:“等离子”,
“尺寸”:“1007.4 x 670.5 x 261.9”,
“制造保证”:“1年”
}
]
}
]
}]
}]
};      
var brand=“三星”//我想你知道,如何根据你的设计得到这个
var type=“LED”//我想你知道,如何根据你的设计得到这个
var typeArray=eval(“jsonArray.products[0].tvs[0].+brand+[0].+type”);
if(typeArray.length){

对于(var i=0;itahnks,您的答案是什么?这是否需要我将它们解析为一个jquery对象来使用.each()?我已经尝试过了,但实际上没有效果。这取决于如何获取数据。AJAX?目前我使用的是getJSON()方法,但考虑将$.ajax与get请求一起使用,因为我需要控制成功、失败等情况,所以是的,AJAXI只是在JQuery中使用完整的ajax调用编辑了我的注释;)如果不需要传递值,只需删除$.ajax…之前的行,并在$.ajax中删除行“data:str,”我不认为
类型
可以等同于
发光二极管
。因为它将一个对象与字符串进行比较..如果我错了,请纠正我:)嗨,Asik,这很好,它很简单!但是我想要更具动态性的东西..例如,在某一点上,我想为三星发光二极管过滤,在另一点上,我想为索尼过滤plasma的..我应该用一些javascipt来传递钥匙吗(比如三星、索尼或其他品牌?)然后使用字符串连接?这是一种好方法吗?@user2678538如果你有新问题,请问一个新问题。我在JQuery中的评论是一种动态方法;)@Maxime我喜欢在对象上进行迭代可以更加灵活,如果我能做到的话work@user2678538,是的,你可以…我已经更新了我的帖子…看,这可能对你有用。祝你好运