使用JSON.parse(),如何在多维数组中取值?

时间:2016-08-25 09:38:07

标签: javascript arrays json

在使用JSON.parse之前,JSON数组如下所示:

var temp = {
      "queries": [
    {
      "sample_size": 3,
      "results": [
        {
          "name": "temperature",
          "tags": {
            "Tag": [
              "temperature"
            ]
           },
           "values": [
            [
              1452221580000,
              27.5
            ],
            [
              1452221640000,
              27.1
            ],
            [
              1452221700000,
              27.3
            ]
           ]
        ]}
     ]}
    }

我需要从数组中获取值,因此我使用JSON.parse()。

var jsonparse_temp = JSON.parse(temp);
var dataNum = jsonparse_temp ['queries']['sample_size'];
var timestamp1 = jsonparse_temp ['queries']['results']['value'][0][0]
var value1 = jsonparse_temp ['queries']['results']['value'][0][1]

之后,value1等于27.5? 我不确定这种方式是否可以将值赋值给变量。

3 个答案:

答案 0 :(得分:1)

它不是一个JSON字符串,它是一个格式良好的对象,无需解析它。有嵌套数组,因此您需要使用索引从数组中获取对象元素。

var temp = {
  "queries": [{
    "sample_size": 3,
    "results": [{
      "name": "temperature",
      "tags": {
        "Tag": [
          "temperature"
        ]
      },
      "values": [
        [
          1452221580000,
          27.5
        ],
        [
          1452221640000,
          27.1
        ],
        [
          1452221700000,
          27.3
        ]
      ]
    }]
  }]

};

// using bracket notation
var dataNum = temp['queries'][0]['sample_size'];
var timestamp1 = temp['queries'][0]['results'][0]['values'][0][0]
var value1 = temp['queries'][0]['results'][0]['values'][0][1];

console.log(dataNum, timestamp1, value1);

// using dot notation
var dataNum1 = temp.queries[0].sample_size;
var timestamp11 = temp.queries[0].results[0].values[0][0]
var value11 = temp.queries[0].results[0].values[0][1];


console.log(dataNum1, timestamp11, value11);

答案 1 :(得分:1)

  

JSON数组如下所示:

那不是JSON。这是一个JavaScript对象。你的问题中没有任何JSON。

var jsonparse_temp = JSON.parse(temp);

这将返回undefined,因为temp不是JSON字符串。

['queries']['sample_size'];

查询是一个数组,而不是一个对象。它没有sample_size属性。

该数组中的第一个值是 具有该属性的对象。

您需要按顺序访问数据结构的每个级别。你不能跳过等级。

var dataNum = temp.queries[0].sample_size;

答案 2 :(得分:1)

将您的代码更改为:



var dataNum = temp['queries']['sample_size'];
var timestamp1 = temp['queries']['results']['value'][0][0]
var value1 = temp['queries']['results']['value'][0][1]