Py学习  »  Jquery

如何从多维JSON数组中检索值而不知道使用JavaScript/jQuery的密钥?

ninetofiver • 4 年前 • 245 次点击  

我有一个包含多维数组的JSON文件。第一层是城市,第二层是温度数据。动态地从第二级提取值时遇到问题。

我尝试了以下方法:

console.log(Object.values(json[0])[3][1]) but it gives me errors.

不过,这很管用:

console.log(Object.values(json[0])[3])

以下是我的JSON代码示例:

[
  {
    "id": 1,
    "city": "Amsterdam",
    "country": "Netherlands",
    "monthlyAvg": [
      {
        "high": 7,
        "low": 3,
        "dryDays": 19,
        "snowDays": 4,
        "rainfall": 68
      },
      {
        "high": 6,
        "low": 3,
        "dryDays": 13,
        "snowDays": 2,
        "rainfall": 47
      },
      {
        "high": 10,
        "low": 6,
        "dryDays": 16,
        "snowDays": 1,
        "rainfall": 65
      },
      {
        "high": 11,
        "low": 7,
        "dryDays": 12,
        "snowDays": 0,
        "rainfall": 52
      },
      {
        "high": 16,
        "low": 11,
        "dryDays": 15,
        "snowDays": 0,
        "rainfall": 59
      },
      {
        "high": 17,
        "low": 11,
        "dryDays": 14,
        "snowDays": 0,
        "rainfall": 70
      },
      {
        "high": 20,
        "low": 12,
        "dryDays": 14,
        "snowDays": 0,
        "rainfall": 74
      },
      {
        "high": 20,
        "low": 12,
        "dryDays": 15,
        "snowDays": 0,
        "rainfall": 69
      },
      {
        "high": 17,
        "low": 10,
        "dryDays": 14,
        "snowDays": 0,
        "rainfall": 64
      },
      {
        "high": 14,
        "low": 9,
        "dryDays": 16,
        "snowDays": 0,
        "rainfall": 70
      },
      {
        "high": 9,
        "low": 6,
        "dryDays": 20,
        "snowDays": 1,
        "rainfall": 82
      },
      {
        "high": 7,
        "low": 1,
        "dryDays": 19,
        "snowDays": 1,
        "rainfall": 85
      }
    ]
  },
  {
    "id": 2,
    "city": "Athens",
    "country": "Greece",
    "monthlyAvg": [

我希望能够检索对应于high的值7。 我现在可以说:

json[0].monthlyAvg[0].high

如果不指定“.high”,如何获得结果

例如,这就是我想象的代码: 所以像这样:

“high”:7->我想通过键入类似json[0]的内容获得7。

“low”:3->我想通过键入类似json[0]的内容获得7。

“drydays”:19->我想通过键入类似json[0]的内容获得7.monthlyavg[0][2]

“Snowdays”:4->我想通过键入类似json[0]的内容获得7。

“降雨量”:68->我想通过键入类似json[0]的内容获得7。monthlyavg[0][4]

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46242
 
245 次点击  
文章 [ 2 ]  |  最新文章 4 年前
brein
Reply   •   1 楼
brein    4 年前

我认为您处理这个问题的方式是错误的,因为在数组上迭代有更多的方便方法。 查看此代码,可以在此处找到一个工作示例: https://codesandbox.io/s/wonderful-grothendieck-2rjze

jsonData.forEach(cityObject => {
  console.log(
    `*** Printing data for ${cityObject.city}, ${cityObject.country} ***`
  );

  cityObject.monthlyAvg.forEach(avg => {
    let stringStat = "";

    for (const key in avg) {
      let value = avg[key];

      if (stringStat.length > 0) stringStat += ", ";

      stringStat += `${key}: ${value}`;
    }

    console.log(stringStat);
  });
});
Palash Sharma
Reply   •   2 楼
Palash Sharma    4 年前
Object.values(Object.values(json[0])[3][0])

现在你可以选择高,低,干等与0,1,2,3,4。

例子

Object.values(Object.values(json[0])[3][0])[0]

将返回7(从阿姆斯特丹的Monthlyavg High)

解释

let flattenedJson = Object.values(json[0]);

这将返回数组中的值,如您所说。但是,第三个索引仍然是一个对象。

let monthlyAVG = flattenedJson[3][n];

其中n是要选择的数据的索引。这将返回带有键high、low、drydays等的对象。

let flattenedData = Object.values(monthlyAVG);

现在我们已经将上一个对象展平为任意数组。

let high = flattenedData[0]

这就是它的工作原理。希望有意义。