2

我有一个 json 文件,我试图从中获取值。在这个文件中,一个对象嵌套在另一个对象中。我可以隔离顶级值,但不能隔离嵌套值。应该是语法问题。这是我正在使用的。

这是json:

{
    "total": [
        [
            {
                "votes": "79,060"
            },
            {
                "percent": "11%"
            },
            {
                "winner": "0"
            }
        ],
        [
            {
                "votes": "167,800"
            },
            {
                "percent": "22%"
            },
            {
                "winner": "0"
            }
        ],
        [
            {
                "votes": "51,519"
            },
            {
                "percent": "7%"
            },
            {
                "winner": "0"
            }
        ],
        [
            {
                "votes": "297,060"
            },
            {
                "percent": "39%"
            },
            {
                "winner": "1"
            }
        ],
        [
            {
                "votes": "156,787"
            },
            {
                "percent": "21%"
            },
            {
                "winner": "0"
            }
        ]
    ],
    "useWinnerColors": 1,
    "timestamp": "3:00 p.m. April 26",
    "candidateCount": 5
}

当我写:

console.log(json.candidateCount);

我得到正确答案(5)。

但是当我写:

console.log(json.total[0][1]);

我得到对象 { percent="11%"}。

当我写:

console.log(json.total[0].votes);

我不确定。

请问如何隔离“total”中项目的价值?

4

2 回答 2

5

你得到了,undefined因为json.total[0]它本身就是一个数组。您需要隔离内部 json.total[0]的特定数组。所以你需要做类似的事情json.total[0][0].votesor json.total[0][1].votes

我认为您的 JSON 的更好结构是这样的:

{"total": [    
   {
      "votes": "79,060"
      "percent": "11%"
      "winner": "0",
   },
   ...
   {
      "votes": "156,787",
      "percent": "21%",
      "winner": "0"
   }], 
   "useWinnerColors": 1,
   "timestamp": "3:00 p.m. April 26",
   "candidateCount": 5
}

现在你可以做json.total[0].votes

您不需要创建一个数组,其中每个条目都是一个名称-值对。您可以直接使用关联数组。

编辑:要遍历您的关联数组,请使用for..inwith hasOwnProperty()。该hasOwnProperty()检查将阻止您迭代它继承的属性(某些第三方库会污染命名空间):

var map = json.total[0];
for(var prop in map) if(map.hasOwnProperty(prop)) {
   var value = map[prop];
   ...
}
于 2012-06-29T17:36:28.147 回答
3

每个'['符号意味着我们处理数组,每个'{' - 处理对象。实际上是json.total一个对象数组的数组(尽管每个内部对象只是一个“元组” - 单个键值对。

所以...

json.total[0][1]- 评估为 { 'percent': '11%' }

json.total[0]['votes']- 评估为无(未定义),因为跳过了一个步骤。) 它真的应该是json.total[0][n].votesor json.total[0][n]['votes']。这两种形式(几乎)是相同的。)

于 2012-06-29T17:37:42.993 回答