2017-05-30 38 views
2

我试图从JSON响应中选取数据,但无法获取所需的所有值。JavaScript - 无法打印具有相同键名的元素

这里是JSON-响应体:

{ 
    "status": "success", 
    "reservations": [ 
    { 
     "id": "38177", 
     "subject": "subjectID", 
     "modifiedDate": "2017-05-16T12:46:17", 
     "startDate": "2017-05-30T08:00:00", 
     "endDate": "2017-05-30T22:00:00", 
     "resources": [ 
     { 
      "id": "124", 
      "type": "room", 
      "code": "F407", 
      "parent": { 
      "id": "4", 
      "type": "building", 
      "code": "buildingF", 
      "name": "buildingName" 
      }, 
      "name": " F407 (atk 34)" 
     } 
     ], 
     "description": "" 
    }, 
    { 
     "id": "38404", 
     "subject": "subjectID", 
     "modifiedDate": "2017-05-16T12:49:25", 
     "startDate": "2017-05-30T08:00:00", 
     "endDate": "2017-05-30T22:00:00", 
     "resources": [ 
     { 
      "id": "128", 
      "type": "room", 
      "code": "F411", 
      "parent": { 
      "id": "4", 
      "type": "building", 
      "code": "buildingF", 
      "name": "buildingName" 
      }, 
      "name": " F411 (atk 34)" 
     } 
     ], 
     "description": "" 
    }, 
    { 
     "id": "38842", 
     "subject": "subjectID", 
     "modifiedDate": "2017-05-30T06:03:13", 
     "startDate": "2017-05-30T08:00:00", 
     "endDate": "2017-05-30T22:00:00", 
     "resources": [ 
     { 
      "id": "107", 
      "type": "room", 
      "code": "F211", 
      "parent": { 
      "id": "4", 
      "type": "building", 
      "code": "buildingF", 
      "name": "buildingName" 
      }, 
      "name": " F211 (room 50)" 
     } 
     ], 
     "description": "" 
    }, 
{ 
     "id": "40186", 
     "subject": "subjectID", 
     "modifiedDate": "2017-05-26T08:45:50", 
     "startDate": "2017-05-30T09:00:00", 
     "endDate": "2017-05-30T14:00:00", 
     "resources": [ 
     { 
      "id": "118", 
      "type": "room", 
      "code": "F312", 
      "parent": { 
      "id": "4", 
      "type": "building", 
      "code": "buildingF", 
      "name": "buildingName" 
      }, 
      "name": " F312 (room 48)" 
     } 
     ], 
     "description": "" 
    }, 
    ] 
} 

这样的想法是选择从每个受试者,其是下面房间代码和名称;

"code": "F407" 
"name": "F407 (atk 34)" 

"code": "F411" 
"name": "F411 (atk 34)" 

"code": "F211" 
"name": "F211 (room 50)" 

"code": "F312" 
"name": "F312 (room 48)" 

我试过用我自己的代码做这个,但是因为某种原因它跳过了一个房间名称。我使用for循环检查JSON响应,并在resources中查找代码和名称,并将它们推入数组中;

var rooms = []; 

for (var i = 0; i < json.reservations.length; i++) { 
    if (json.reservations[i].resources != null) { 
     for (var j = 0; j < json.reservations[i].resources.length; j++) 
      { 
      var reservation = json.reservations[i]; 
      var resource = json.reservations[i].resources[j]; 

      if (resource.type === "room") { 
       if (rooms.indexOf("code")) {           
        rooms.push(resource.code + resource.name); 
       }         
      }         
     } 
    } 
} 

document.getElementById("pageOne").innerHTML = rooms.join("<br/>") 

输出如下它省去了"name": "F411 (atk 34)"

F407 F407 (atk 34) 
F411 
F211 F211 (room 50) 
F312 F312 (room 48) 

任何建议,为什么会这样?

+0

粘贴代码为小提琴,它的工作原理,不被当场:https://jsfiddle.net/p474djan/ –

+0

的方式,将JSON是无效的,你有一个不需要的“,”和你的代码在jsfiddle的作品 – ChaosPattern

回答

1

可以使用Array.prototype.map()

的地图()方法创建调用此阵列中的每个元件上的 提供的函数的结果的新的数组。

var res = data.reservations.map(function(_data) { 
    return { 
    code: _data.resources[0].id, 
    name: _data.resources[0].name 
    } 
}); 

console.log(res); 

代码片段

var data = { 
 
    "status": "success", 
 
    "reservations": [{ 
 
     "id": "38177", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-16T12:46:17", 
 
     "startDate": "2017-05-30T08:00:00", 
 
     "endDate": "2017-05-30T22:00:00", 
 
     "resources": [{ 
 
     "id": "124", 
 
     "type": "room", 
 
     "code": "F407", 
 
     "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
     }, 
 
     "name": " F407 (atk 34)" 
 
     }], 
 
     "description": "" 
 
    }, 
 
    { 
 
     "id": "38404", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-16T12:49:25", 
 
     "startDate": "2017-05-30T08:00:00", 
 
     "endDate": "2017-05-30T22:00:00", 
 
     "resources": [{ 
 
     "id": "128", 
 
     "type": "room", 
 
     "code": "F411", 
 
     "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
     }, 
 
     "name": " F411 (atk 34)" 
 
     }], 
 
     "description": "" 
 
    }, 
 
    { 
 
     "id": "38842", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-30T06:03:13", 
 
     "startDate": "2017-05-30T08:00:00", 
 
     "endDate": "2017-05-30T22:00:00", 
 
     "resources": [{ 
 
     "id": "107", 
 
     "type": "room", 
 
     "code": "F211", 
 
     "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
     }, 
 
     "name": " F211 (room 50)" 
 
     }], 
 
     "description": "" 
 
    }, 
 
    { 
 
     "id": "40186", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-26T08:45:50", 
 
     "startDate": "2017-05-30T09:00:00", 
 
     "endDate": "2017-05-30T14:00:00", 
 
     "resources": [{ 
 
     "id": "118", 
 
     "type": "room", 
 
     "code": "F312", 
 
     "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
     }, 
 
     "name": " F312 (room 48)" 
 
     }], 
 
     "description": "" 
 
    }, 
 
    ] 
 
}; 
 

 

 
var res = data.reservations.map(function(_data) { 
 
    return { 
 
    code: _data.resources[0].id, 
 
    name: _data.resources[0].name 
 
    } 
 
}); 
 

 
console.log(res);

2

这是你想要的吗?

var json = { 
 
    "status": "success", 
 
    "reservations": [ 
 
    { 
 
     "id": "38177", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-16T12:46:17", 
 
     "startDate": "2017-05-30T08:00:00", 
 
     "endDate": "2017-05-30T22:00:00", 
 
     "resources": [ 
 
     { 
 
      "id": "124", 
 
      "type": "room", 
 
      "code": "F407", 
 
      "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
      }, 
 
      "name": " F407 (atk 34)" 
 
     } 
 
     ], 
 
     "description": "" 
 
    }, 
 
    { 
 
     "id": "38404", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-16T12:49:25", 
 
     "startDate": "2017-05-30T08:00:00", 
 
     "endDate": "2017-05-30T22:00:00", 
 
     "resources": [ 
 
     { 
 
      "id": "128", 
 
      "type": "room", 
 
      "code": "F411", 
 
      "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
      }, 
 
      "name": " F411 (atk 34)" 
 
     } 
 
     ], 
 
     "description": "" 
 
    }, 
 
    { 
 
     "id": "38842", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-30T06:03:13", 
 
     "startDate": "2017-05-30T08:00:00", 
 
     "endDate": "2017-05-30T22:00:00", 
 
     "resources": [ 
 
     { 
 
      "id": "107", 
 
      "type": "room", 
 
      "code": "F211", 
 
      "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
      }, 
 
      "name": " F211 (room 50)" 
 
     } 
 
     ], 
 
     "description": "" 
 
    }, 
 
{ 
 
     "id": "40186", 
 
     "subject": "subjectID", 
 
     "modifiedDate": "2017-05-26T08:45:50", 
 
     "startDate": "2017-05-30T09:00:00", 
 
     "endDate": "2017-05-30T14:00:00", 
 
     "resources": [ 
 
     { 
 
      "id": "118", 
 
      "type": "room", 
 
      "code": "F312", 
 
      "parent": { 
 
      "id": "4", 
 
      "type": "building", 
 
      "code": "buildingF", 
 
      "name": "buildingName" 
 
      }, 
 
      "name": " F312 (room 48)" 
 
     } 
 
     ], 
 
     "description": "" 
 
    }, 
 
    ] 
 
}; 
 

 

 
var rooms = ''; 
 

 
for (var i = 0; i < json.reservations.length; i++) { 
 
    if (json.reservations[i].resources != null) { 
 
     
 
    for(var j=0; j<json.reservations[i].resources.length; j++){  rooms +=json.reservations[i].resources[j].code +" " + json.reservations[i].resources[j].name+"</br>"; 
 
    } 
 
    } 
 
} 
 
document.getElementById("pageOne").innerHTML = rooms;
<div id="pageOne"></div>

1

我执行你的代码,一切都很好。虽然你的代码可以改进:

for (var i = 0; i < json.reservations.length; i++) { 
    if (json.reservations[i].resources != null) { 
     var reservation = json.reservations[i]; 
     for (var j = 0; j < reservation.resources.length; j++) 
      { 
      var resource = reservation.resources[j]; 

      if (resource.type === "room") {          
       rooms.push(resource.code + resource.name);         
      }         
     } 
    } 
} 
1
yourobject.reservations.forEach(function(a){a.resources. 
    forEach(function(room){console.log({"code":room.code,"name":room.name})})}) 
相关问题