我有一个对象,当我使用console.log打印而不进行字符串化时,它看起来像这样:
SuiteStats {
type: 'suite',
start: 2019 - 06 - 04T13: 04: 10.640Z,
_duration: 6262,
uid: 'District1',
cid: '0-0',
title: 'District',
fullTitle: undefined,
tests: [],
hooks: [],
suites:
[SuiteStats {
type: 'suite',
start: 2019 - 06 - 04T13: 04: 15.271Z,
_duration: 1621,
uid: 'Create District5',
cid: '0-0',
title: '@sanity, @sanityUpgraded, @debug: Create District',
fullTitle: undefined,
tests: [Array],
hooks: [],
suites: [],
end: 2019 - 06 - 04T13: 04: 16.892Z
}
],
end: 2019 - 06 - 04T13: 04: 16.902Z
}
现在我想获得SuiteStats内部套件中SuiteSustats的标题(其值为:“ @ sanity,@ sanityUpgraded,@ debug:创建区域”)
console.log(SuiteStats.suites[0].title
不起作用,它退出并显示有关“ TypeError:无法读取未定义的属性'title'的错误”
我尝试了其他方法但没有成功,例如:
console.log(SuiteStats.suites[0].SuiteStats.title
那么我在做什么错了,为什么这个对象与我过去使用过的另一个对象不同?
这是字符串化后对象的外观:
{
"type": "suite",
"start": "2019-06-04T13:29:25.385Z",
"_duration": 5575,
"uid": "District1",
"cid": "0-0",
"title": "District",
"tests": [],
"hooks": [],
"suites": [{
"type": "suite",
"start": "2019-06-04T13:29:29.737Z",
"_duration": 1220,
"uid": "Create District5",
"cid": "0-0",
"title": "@sanity, @sanityUpgraded, @debug: Create District",
"tests": [{
"type": "test",
"start": "2019-06-04T13:29:29.745Z",
"_duration": 369,
"uid": "I am logged in as admin user \"ufedadmin\"7",
"cid": "0-0",
"title": "I am logged in as admin user \"ufedadmin\"",
"output": [],
"state": "passed",
"end": "2019-06-04T13:29:30.114Z"
}, {
"type": "test",
"start": "2019-06-04T13:29:30.122Z",
"_duration": 523,
"uid": "I create or overwrite District \"Argentina3\" with code \"Argentina3\"8",
"cid": "0-0",
"title": "I create or overwrite District \"Argentina3\" with code \"Argentina3\"",
"output": [],
"state": "passed",
"end": "2019-06-04T13:29:30.645Z"
}, {
"type": "test",
"start": "2019-06-04T13:29:30.667Z",
"_duration": 283,
"uid": "I expect that district \"Argentina3\" was created9",
"cid": "0-0",
"title": "I expect that district \"Argentina3\" was created",
"output": [],
"state": "passed",
"end": "2019-06-04T13:29:30.950Z"
}
],
"hooks": [],
"suites": [],
"end": "2019-06-04T13:29:30.957Z"
}
],
"end": "2019-06-04T13:29:30.960Z"
}
答案 0 :(得分:1)
看起来工作正常:
var data = {
"type": "suite",
"start": "2019-06-04T13:29:25.385Z",
"_duration": 5575,
"uid": "District1",
"cid": "0-0",
"title": "District",
"tests": [],
"hooks": [],
"suites": [{
"type": "suite",
"start": "2019-06-04T13:29:29.737Z",
"_duration": 1220,
"uid": "Create District5",
"cid": "0-0",
"title": "@sanity, @sanityUpgraded, @debug: Create District",
"tests": [{
"type": "test",
"start": "2019-06-04T13:29:29.745Z",
"_duration": 369,
"uid": "I am logged in as admin user \"ufedadmin\"7",
"cid": "0-0",
"title": "I am logged in as admin user \"ufedadmin\"",
"output": [],
"state": "passed",
"end": "2019-06-04T13:29:30.114Z"
}, {
"type": "test",
"start": "2019-06-04T13:29:30.122Z",
"_duration": 523,
"uid": "I create or overwrite District \"Argentina3\" with code \"Argentina3\"8",
"cid": "0-0",
"title": "I create or overwrite District \"Argentina3\" with code \"Argentina3\"",
"output": [],
"state": "passed",
"end": "2019-06-04T13:29:30.645Z"
}, {
"type": "test",
"start": "2019-06-04T13:29:30.667Z",
"_duration": 283,
"uid": "I expect that district \"Argentina3\" was created9",
"cid": "0-0",
"title": "I expect that district \"Argentina3\" was created",
"output": [],
"state": "passed",
"end": "2019-06-04T13:29:30.950Z"
}
],
"hooks": [],
"suites": [],
"end": "2019-06-04T13:29:30.957Z"
}
],
"end": "2019-06-04T13:29:30.960Z"
};
console.log(data.suites[0].title);
答案 1 :(得分:0)
我认为很好。 要在此处对对象进行故障排除,可以使用
var object = your_json;
var array = object.suites;
console.log(array.length); //confirm array !empty
//lets see if we can get all the titles
for(var i=0; i<array.length; i++){
console.log(array[i].title);
}
//since you explicitly know that this is an array of objects. check keys and values
for (var key in array) {
var value = array[key];
console.log(key, value);
}
//troubleshooting: if you think the value is an array write a recursive function
function my_recursive_function(array){
for(var key in array) {
var value = array[key];
if(Array.isArray(value)){
my_recursive_function(value)
}else{
console.log(key, value);
}
}
}