【问题标题】:Access JSON key value dynamically using jquery使用 jquery 动态访问 JSON 键值
【发布时间】:2016-09-24 13:40:56
【问题描述】:

下面是我的动态 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”键。

【问题讨论】:

  • 你只需要附加 .yyy813AI20160929.O.AD.bf
  • @Pat : yyy813AI20160929 键是动态的,不可能像你给的那样做
  • 试试这个:data.resultData[0].fareDetails.xxxxxx20160929['yyy813AI20160929'].O.AD.bf
  • @Samuel : : yyy813AI20160929 键是动态的,我们不能像你给的那样保持静态
  • 这很简单 - 你可以这样做var data = >> 然后这样做(前提是只有 1 个孩子同意对于 xxxxxx20160929) var value; for (var key in data) { value = key; } 然后你有你的 bf 值 - data.value.O.AD.bf

标签: javascript jquery json


【解决方案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;

【讨论】:

  • : xxxxxx20160929, yyy813AI20160929 键是动态的,我们不能像你给的那样保持静态
  • 你能建议如何动态访问“yyy813AI20160929”
  • 您的意思是您不知道该属性的名称是什么?
  • 我不明白上述方式,但你保持'两个'变量静态并采用'yyy813AI20160929',我想知道如何从json上方动态获取'yyy813AI20160929'值
  • 我更新了答案以显示如何为每一层动态获取密钥。
【解决方案2】:
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/

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-05
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-17
      • 2022-01-20
      • 1970-01-01
      • 2017-06-27
      相关资源
      最近更新 更多