JSON - Итерации над вложенными данными

Обновить

March 2019

Просмотры

64 раз

1

У меня есть 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. Мне нужно фильтровать данные, например, получить только leds'объекты. Каков наилучший способ фильтрации: я должен использовать jquery's .each(), или for inцикл?

Я пытаюсь перебирать его , используя подход .each (), но я застрял на той части , где мне нужно проверить , если текущий объект 'leds'или 'plasma'.

С другой стороны, если я использую for (var x in obj), я получаю доступ к имени объекта через «х» ..

Так что я должен сделать это с помощью for inцикла? и как именно я сделал бы это?

2 ответы

1

This is the solution from native 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>
1

Assuming that data contains your 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 ...
            }
         });
      });
   });
});

EDIT : Full with AJAX call

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
    }
});