0

这里是 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)我有什么办法动态地做到这一点吗?

4

5 回答 5

1

您可以创建一个单独的对象,将您的数据与键一起存储为 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');
于 2013-06-06T12:13:45.143 回答
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
于 2013-06-06T12:14:44.830 回答
0

你可以像这样使用:

    var color = '';
    if (data[4].mer == "egg") {
        color = data[4].color;
    }
于 2013-06-06T12:12:17.857 回答
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;
    }
}
于 2013-06-06T12:10:44.510 回答
0

对于一个有点复杂但做得很好的解决方案,请参阅JSONiq,它允许对 JSON 格式的数据进行良好而轻松的操作和提取。

否则,对于具有较少开销和拉扯头发以使其工作的东西,请考虑以下其中之一:

于 2013-06-06T12:10:09.917 回答