我正在尝试从json数组读取值以显示在页面中。我尝试使用下面的代码,但无法实现。我想要很长时间才能完成这件事。请告诉我这里做错了什么。
此外,我无法执行JSON.parse-意外输入错误。
http.request(options, function(res) {
res.on('data', function (result) {
console.log(result);//Displaying below format of result without any error
console.log(result.Reference[0].name); Error //TypeError: Cannot read property '0' of undefined.
console.log(result.Reference.length);//Error TypeError: Cannot read property 'length' of undefined
JSON格式:打印结果时
{
"Reference": [
{
"name": "xxxxxxxx",
"typeReference": {
"articulation": 0,
"locked": false,
"createdBy": {
"userName": "System",
},
"lastModifiedBy": {
"userName": "System",
},
"lastModified": 1391084398660,
"createdOn": 1391084398647,
"isSystem": true
},
"communityReference": {
"name": "xxxxxx",
"language": "English",
"sbvr": false,
"parentReference": {
"name": "xxxxx",
"sbvr": false,
"meta": false,
"parentReference": null,
"locked": false,
"createdBy": {
"userName": "xxxxx",
},
"lastModifiedBy": {
"userName": "xxxxx",
},
"lastModified": 1459185726230,
"createdOn": 1456337723119,
"isSystem": false
},
"locked": false,
"createdBy": {
"userName": "xxxxx",
},
"lastModifiedBy": {
"userName": "xxxxxx",
},
"lastModified": 1472655031590,
"createdOn": 1472654988012,
"isSystem": false
},
"locked": false,
"createdBy": {
"userName": "xxxxx",
},
"lastModifiedBy": {
"userName": "xxxxx",
"firstName": "xxxxx",
},
"lastModified": 1473171981520,
"createdOn": 1472655253366,
"isSystem": false
},
{
"name":"yyyyyy", same attribute type as above.
...
},
{
..
},
答案 0 :(得分:2)
res
是一个流,data事件表示它已收到一些数据,但它可能是也可能不是所有数据。您不可能一次获得所有数据,所以当您拥有整个JSON对象时,需要等到end事件触发:
var json = '';
res.on('data', function ( chunk ) {
json += chunk;
} );
res.on('end', function ( ) {
var result = JSON.parse( json );
console.log( result.Reference[0].name );
} );
或者您可以使用json-stream,它可以通过块读取JSON块并正确处理,与JSON.parse不同。
但是,我建议您不要使用上述任一解决方案,而是使用request,这极大地简化了此请求以及处理HTTP请求和处理响应的其他方面。
答案 1 :(得分:-2)
您可以尝试使用其他一些安全的验证:
{
if ( result ) {
var data = (typeof result == "string") ? JSON.parse(result) : result;
if (data.hasOwnProperty("Reference")) {
for(var i = 0; i < data.Reference.length; i++; ) {
try {
var reference = data.Reference[i];
console.log("Name:" + reference.name);
//Your app logic
} catch(e) {
//In case if any invalid references, then continue with others
console.warn("Error processing reference - " + e);
}
}
} else {
console.warn("No References were found!");
}
} else {
console.error("Invalid JSON!");
}
}
希望它有所帮助!