在这种情况下,是否可以减少读取JSON值的功能

时间:2014-06-04 15:06:32

标签: jquery json

我有这样的JSON格式

{
    "items": {
        "item": {
            "Beverages": [
                {
                    "id": "0001",
                    "name": "Coke",
                    "image": {
                        "url": "json_images/coke.jpg",
                        "width": 200,
                        "height": 200
                    },
                    "category": [
                        {
                            "category_name": "Cokecan",
                            "image": "json_images/coke_can.jpg",
                            "type": [
                                {
                                    "id": "p1",
                                    "type": "250ml",
                                    "price": "50"
                                },
                                {
                                    "id": "p2",
                                    "type": "300ml",
                                    "price": "60"
                                }
                            ]
                        }
                    ]
                },
                {
                    "id": "0005",
                    "name": "Pepsi",
                    "image": {
                        "url": "json_images/pepsi.jpg",
                        "width": 200,
                        "height": 200
                    },
                    "category": [
                        {
                            "category_name": "Pepsican",
                            "image": "json_images/pepsi_can.jpg",
                            "type": [
                                {
                                    "id": "p4",
                                    "type": "250ml",
                                    "price": "50"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }
}

我的问题是,如果我从上面的JSON中选择Beverages然后选择Coke,我会按照以下方式获取值250ml和300Ml

无论如何,我能以更高效的方式做到这一点。

//返回第一级的功能

function returnfirstlevelValues(value) {
                  var data;
                  $.each(jsondata.items.item, function(i, v) {
                    if (i == value) {

                      data = v;
                    }
                  });
 return data;
                }

//返回第二级的功能

function returnSecondlevelValues(value) {
                  var innerdata = [];
                  for (var i = 0; i < retdata.length; i++) {
                    if (retdata[i].name == value) {
                      for (var b = 0; b < retdata[i].category.length; b++) {
                        innerdata.push(retdata[i].category[b].category_name);
                      }
                    }
                  }
                  return innerdata;
                }

//返回第三级的功能

        function returnThirdlevelValues(value) {
          var objArray = [];
          $.each(retdata, function(i, item) {

            $.each(item.category, function(j, item) {

              if (item.category_name == value) {
                obj.image = item.image;
                obj.type = [];
                obj.price = [];
    obj.id = [];
                $.each(item.type, function(k, e) {
                  obj.type.push(e.type);
                  obj.price.push(e.price);
       obj.id.push(e.id);
                });
                objArray.push(obj);
              }
            });


          });
          return objArray;


        }

这是我的jsfiddle http://jsfiddle.net/f5T9d/

2 个答案:

答案 0 :(得分:1)

处理JSON

这是我写它的方式,它的旧javascript&amp;使用高性能的短角。

function first(value){
 return jsondata.items.item[value]||false
}

function second(value){
 var l=firstReturn.length,temp;
 while(l--){
  firstReturn[l].name!=value||(temp=firstReturn[l].category)
 };
 return temp||false
}

function third(value){
 var l=secondReturn.length,temp;
 while(l--){
  secondReturn[l]['category_name']!=value||(temp=secondReturn[l].type)
 };
 return temp||false
}

<强>样本

http://jsfiddle.net/43MV2/

如果输出不符合您的预期,请告诉我并进行一些修改......

如果您有任何问题,请询问。

答案 1 :(得分:0)

您可以使用JQuery中的parseJSON,以便将数据视为对象