使用jquery动态访问JSON键值

时间:2016-09-24 13:40:57

标签: javascript jquery json

下面是我的json,它是动态的。我想在json中访问'bf'键,'xxxxxx20160929'和'yyy813AI20160929'键是动态的,但json结构将是相同的

{
  "resultData": [
    {
      "a": "124",
      "b": "0",
      "c": "0",
      "flc_schedu": {
          "e": "6",
          "f": "en",
          "xxxxxx20160929": [
            {"ID": "yyyyyyyy" },
            {"ID": "fffff"}
         ]
      },
      "fareDetails": {
        "xxxxxx20160929": {
          "yyy813AI20160929": {
            "O": {
              "AD": {
                "bf": "2527"
                    }
                 }
          }
        }
            }
    }
  ]
}

以下是我尝试的方式

response.resultData[0].fareDetails[Object.keys(response.resultData[0].fareDetails)[0]]

如果我按上述方法尝试,我可以动态访问“xxxxxx20160929”键,但我无法获得如何达到动态“bf”键。

3 个答案:

答案 0 :(得分:1)

您可以使用数组语法引用对象。

var one = 'xxxxxx20160929';
var two = 'yyy813AI20160929';
data.resultData[0].fareDetails[one][two].O.AD.bf;

更新:

此代码假设每层只有一个动态对象。

var one = Object.keys(data.resultData[0].fareDetails)[0];
var two = Object.keys(data.resultData[0].fareDetails[one])[0];
var thing = data.resultData[0].fareDetails[one][two].O.AD.bf;

答案 1 :(得分:1)

function getBFFromFareDetails(details){
 var bfValues = [];
  for(var k in details.fareDetails){
   // loop over the children of fareDetails
   if( details.fareDetails.hasOwnProperty( k ) ) {
      //each entry in ;fareDetails'
      var itemRoot = details.fareDetails[k]
      for(var k1 in itemRoot){
         // loop over the children of the first unknown item
          if( itemRoot.hasOwnProperty( k1 ) ) {
              //return the bf from the first unknown child
             return itemRoot[k1].O.AD.bf;
          }
      }
    } 
  }
}

如果您使用var bf = getBFFromFareDetails(response.resultData[0])调用此方法 这将返回fareDetails的第一个孩子及其第一个孩子的第一个bf的值。

您可以在此处看到一个快速示例https://jsfiddle.net/tocsoft/5364x2sp/

答案 2 :(得分:0)

如果您能够访问" xxxxxx20160929"然后创建一个var来存储该级别,然后使用该变量访问您需要存储在变量中的下一个变量,然后使用这两个变量来访问所需的密钥。

var1 = response.resultData[0].fareDetails)[0];
var2 = response.resultData[0].fareDetails)[0][var1];

response.resultData[0].fareDetails)[0][var1][var2];