我制作了一个看起来像这样的小测试页面:
<!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]
我是否可以检索suites
,tests
和passes
的数量?
因此,提醒的输出结果为suites 7
,tests 13
和passes 11
。
编辑:
理想情况下,我希望将这些值存储在自己的变量中,而不仅仅是alert
或console.log
。
david
的编辑
enter image description here
编辑3:
我试过了:
console.log(items[2].suites);
=&gt; undefined
答案 0 :(得分:2)
您没有将stats推送到items数组。这就是为什么你不能得到它的数据。 尽量做到更简单
var json = $.getJSON("../js/report.json", function(data) {
var stats = data.stats;
$.each(stats, function(key, val){
alert(key + " " + val)
});
});
答案 1 :(得分:1)
以下是检索suites
,tests
,passes
的数量的方法。
检索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'
});
由于对象内部有一个对象,我必须使用递归来跟踪所有数据。