从json访问特定数据

时间:2013-06-06 12:07:23

标签: javascript json

这里是Json文件

 "data" : [
        {
            "mer" : "a",
            "AName" : "Am",
            "numProducts" : "69",
            "p" : "1.21",
            "color" : "#0b4977"
        },
        {
            "mer" : "b",
            "AName" : "Ma",
            "numProducts" : "42",
            "p" : "1.0",
            "color" :"#1d94dd"
        },

        {
            "mer" : "c",
            "AName" : "An",
            "numProducts" : "91",
            "p" : "1.01",
            "color" :"#09213a"
        },

        {
            "mer" : "d",
            "AName" : "A1",
            "numProducts" : "91",
            "p" : "1.01",
            "color" :"#ffcc00"
        },

        {
            "mer" : "egg",
            "AName" : "B2",
            "numProducts" : "91",
            "p" : "1.01",
            "color" :"#fcee21"
        }
    ]
}

这里如果需要访问最后一个'mer'值,我会像data [4] .mer那样做,但我想从json文件中访问特殊值,如果它匹配来自同一数据数组的某个条件

例如这里我的最后一个'mer'的值为“egg”,现在我想访问它的特定颜色值。 (#fcee21)我有什么方法可以动态地做到这一点吗?

5 个答案:

答案 0 :(得分:1)

你可以创建一个单独的对象,用key作为mer存储你的数据,然后使用函数getColor,它根据提供的键返回你的值。

    var temp = {};
    for (var i = 0; i < data.length; i++) {
      temp[data[i].mer]  = data[i];
    };

    function getColor(key){
      return temp[key].color;

    }

然后您可以使用getColor,如下所示。

    var eggColor = getColor('egg');

答案 1 :(得分:0)

对于一个有点复杂但非常好的解决方案,请参阅JSONiq,它允许很好地操作和提取JSON格式的数据。

否则,对于具有较少开销和拉毛的东西来实现它,请考虑以下任何一种:

答案 2 :(得分:0)

if (data[4].mer == "egg") {
    var color = data[4].color;
}

更容易的是循环​​遍历测试每个索引值的数组,而不是将特定索引与硬编码if语句进行比较。

for (var i = 0; i < data.length; i++) {
    if (data[i].mer == "egg") {
        var color = data[i].color;
    }
}

答案 3 :(得分:0)

你可以像这样使用:

    var color = '';
    if (data[4].mer == "egg") {
        color = data[4].color;
    }

答案 4 :(得分:0)

你是说你需要在获得颜色之前找到匹配?然后

//this will work on modern browsers - for IE8 and below, use a shim, for example
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

//data is your json object
var matchedObj = data.reduce( function( obj, current ){
                   if( "egg" === current.mer ){
                     obj = current;
                   }
                   return obj;
                 }, {});

console.log( matchedObj.color ); //either a string or undefined