从本地嵌套的JSON对象中检索数据

时间:2016-08-12 08:20:40

标签: javascript json

我制作了一个看起来像这样的小测试页面:

<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
    <title>Get JSON Value</title>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

</head>
<body>

    <script>

        var json = $.getJSON("../js/report.json", function(data) 
        {
            var items = [];

            $.each(data, function (key, value)
            {
                items.push(key + " " + value);  
            });

            alert(items[3]);
        });

    </script>

</body>
</html>

从本地服务器上存储的本地JSON文件中获取数据。

JSON对象如下所示:

{
  "reportTitle": "Results",
  "inlineAssets": false,
  "stats": {
    "suites": 7,
    "tests": 13,
    "passes": 11,
    "pending": 0,
    "failures": 2,
    "start": "2016-08-11T13:30:48.362Z",
    "end": "2016-08-11T13:31:29.433Z",
    "duration": 41071,
    ...
}

alert(items[2]);给了我stats [object Object] alert(items[3]);给了我suites [object Object]

我是否可以检索suitestestspasses的数量? 因此,提醒的输出结果为suites 7tests 13passes 11

编辑:

理想情况下,我希望将这些值存储在自己的变量中,而不仅仅是alertconsole.log

david的编辑 enter image description here

编辑3:

我试过了:

console.log(items[2].suites); =&gt; undefined

2 个答案:

答案 0 :(得分:2)

您没有将stats推送到items数组。这就是为什么你不能得到它的数据。 尽量做到更简单

var json = $.getJSON("../js/report.json", function(data) {
    var stats = data.stats;
    $.each(stats, function(key, val){
       alert(key + " " + val)
    });
});

Simulation example

答案 1 :(得分:1)

以下是检索suitestestspasses的数量的方法。

检索suites =&gt;的数量items[3].stats.suites

检索tests =&gt;的数量items[3].stats.tests

检索passes =&gt;的数量items[3].stats.passes

将括号内的3替换为您想要的索引编号。

修改

你可以忘记我上面的答案。这才是真正的答案。我已经修改了你的代码以获得你想要的答案。

var items=[];
function recursive(data){
    $.each(data, function (key, value)
    {
        if (value instanceof Object) {
            recursive(value);
        } else {
            items.push(key + " " + value);
        }
    });
}

var json = $.getJSON("report.json", function(data) 
{
    recursive(data);
    console.log(items[2]); // return 'suites 7'
    console.log(items[3]); // return 'tests 13'
    console.log(items[4]); // return 'passes 11'
});

由于对象内部有一个对象,我必须使用递归来跟踪所有数据。