我正在查询远程服务器并收到json响应。响应的格式取决于响应中的对象数。如果只有一个对象,它看起来类似于:
"results": {
"meeting": {
"location": "Location A",
"time": "1378033200"
}
}
但如果响应中有多个对象,我会得到一个对象数组:
"results": {
"meeting": [
{
"location": "Location A",
"time": "1378033200"
},
{
"location": "Location B",
"time": "1379250000"
}
]
}
服务器的完整响应包含一个“计数”变量,因此我可以区分这两种情况。在我的Javascript中,我首先检查计数,如果只有一个对象,我会读出类似于的位置和时间信息:
var location = results.meeting.location;
var time = results.meeting.time;
如果除了一个对象之外还有其他东西,我会
for(var i=0; i<count; i++) {
var location = results.meeting[i].location;
var time = results.meeting[i].time;
}
这有效,但我想知道是否有更优雅的方式处理这两种情况?
答案 0 :(得分:5)
始终可以将其作为数组循环,
if(!(results.meeting instanceof Array)){
results.meeting = [results.meeting];
}
因此,如果一个数组包含一个数据
,您将始终获得一个数组所以以及之后总是
var count = results.meeting.length;
for(var i=0; i<count; i++) {
var location = results.meeting[i].location;
var time = results.meeting[i].time;
}
答案 1 :(得分:0)
处理这种情况的最佳方法是更改JSON响应,以便meeting
始终是一个数组,即使它只有一个条目。如果您无法更新JSON的创建方式,一种简单的方法是使用instanceof
进行测试:
if(results.meeting instanceof Array) {
//array
} else {
//object
}
答案 2 :(得分:0)
你可以这样做:
var meetings = result.count ? result.meeting : [result.meeting];
但更好的整体设计当然是首先返回一个数组。