Javascript 使用JQuery将选定的JSON数组数据打印到页面

Javascript 使用JQuery将选定的JSON数组数据打印到页面,javascript,jquery,arrays,json,Javascript,Jquery,Arrays,Json,在处理棘手的JSON对象时运气不佳,无法将某些数据写入HTML页面。我试图只针对数组中的特定数据集,而不是整个数组。不幸的是,我无法控制JSON对象/数据的显示方式 以下是我所做的: <script> var response={ "bookings": { "group_id": 12306, "name": "Public Meeting Rooms", "url": "http:\/\/slqpub.libcal.com\/rooms

在处理棘手的JSON对象时运气不佳,无法将某些数据写入HTML页面。我试图只针对数组中的特定数据集,而不是整个数组。不幸的是,我无法控制JSON对象/数据的显示方式

以下是我所做的:

    <script>
    var response={
  "bookings": {
    "group_id": 12306,
    "name": "Public Meeting Rooms",
    "url": "http:\/\/slqpub.libcal.com\/rooms.php?i=12306",
    "timeslots": [{
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "Mahjong",
      "booking_start": "2016-01-20T10:00:00+10:00",
      "booking_end": "2016-01-20T11:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "Mahjong",
      "booking_start": "2016-01-20T11:00:00+10:00",
      "booking_end": "2016-01-20T12:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "Mahjong",
      "booking_start": "2016-01-20T12:00:00+10:00",
      "booking_end": "2016-01-20T13:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "Jo Tindall and Sagarika",
      "booking_start": "2016-01-20T14:00:00+10:00",
      "booking_end": "2016-01-20T15:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "Jo Tindall and Sagarika",
      "booking_start": "2016-01-20T15:00:00+10:00",
      "booking_end": "2016-01-20T16:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "James Math",
      "booking_start": "2016-01-20T16:00:00+10:00",
      "booking_end": "2016-01-20T17:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "James Math",
      "booking_start": "2016-01-20T17:00:00+10:00",
      "booking_end": "2016-01-20T18:00:00+10:00"
    }, {
      "room_id": "36615",
      "room_name": "Meeting Room 2A",
      "booking_label": "James Math",
      "booking_start": "2016-01-20T18:00:00+10:00",
      "booking_end": "2016-01-20T19:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "IELTS",
      "booking_start": "2016-01-20T10:00:00+10:00",
      "booking_end": "2016-01-20T11:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "recording",
      "booking_start": "2016-01-20T11:00:00+10:00",
      "booking_end": "2016-01-20T12:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "recording",
      "booking_start": "2016-01-20T12:00:00+10:00",
      "booking_end": "2016-01-20T13:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "IELTS",
      "booking_start": "2016-01-20T13:00:00+10:00",
      "booking_end": "2016-01-20T14:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "IELTS",
      "booking_start": "2016-01-20T15:00:00+10:00",
      "booking_end": "2016-01-20T16:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "Luke",
      "booking_start": "2016-01-20T16:00:00+10:00",
      "booking_end": "2016-01-20T17:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "Luke",
      "booking_start": "2016-01-20T17:00:00+10:00",
      "booking_end": "2016-01-20T18:00:00+10:00"
    }, {
      "room_id": "36616",
      "room_name": "Meeting Room 2B",
      "booking_label": "Luke",
      "booking_start": "2016-01-20T18:00:00+10:00",
      "booking_end": "2016-01-20T19:00:00+10:00"
    }],
    "last_updated": "2016-01-20T12:40:36+10:00"
  }
}

    </script> 

    <table border="1">
    <tr><th>Room Name</th><th>Booked by</th></tr>
    <tr><td>Meeting Room 2A</td><td><span id="room_bookings2a"></span></td></tr>
    <tr><td>Meeting Room 2B</td><td><span id="room_bookings2b"></span></td></tr>
    <tr><td>Meeting Room 4B</td></tr>
    <tr><td>Meeting Room 4A</td></tr>
    <tr><td>Meeting Room 3E</td></tr>
    <tr><td>Meeting Room 3D</td></tr>
    <tr><td>Meeting Room 3C</td></tr>
    <tr><td>Meeting Room 3B</td></tr>
    <tr><td>Meeting Room 3A</td></tr>
    <tr><td>Meeting Room 2D</td></tr>
    <tr><td>Meeting Room 2C</td></tr>
    <tr><td>Meeting Room 2B</td></tr>
    <tr><td>Meeting Room 4D</td></tr>
    </table>

var响应={
“预订”:{
“组id”:12306,
“名称”:“公共会议室”,
“url:“http:\/\/slqpub.libcal.com\/rooms.php?i=12306”,
“时隙”:[{
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“麻将”,
“预订开始”:“2016-01-20T10:00:00+10:00”,
“预订结束”:“2016-01-20T11:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“麻将”,
“预订开始”:“2016-01-20T11:00:00+10:00”,
“预订结束”:“2016-01-20T12:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“麻将”,
“预订开始”:“2016-01-20T12:00:00+10:00”,
“预订结束”:“2016-01-20T13:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“Jo Tindall和Sagarika”,
“预订开始”:“2016-01-20T14:00:00+10:00”,
“预订结束”:“2016-01-20T15:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“Jo Tindall和Sagarika”,
“预订开始”:“2016-01-20T15:00:00+10:00”,
“预订结束”:“2016-01-20T16:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“詹姆士数学”,
“预订开始”:“2016-01-20T16:00:00+10:00”,
“预订结束”:“2016-01-20T17:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“詹姆士数学”,
“预订开始”:“2016-01-20T17:00:00+10:00”,
“预订结束”:“2016-01-20T18:00:00+10:00”
}, {
“房间id”:“36615”,
“会议室名称”:“2A会议室”,
“预订标签”:“詹姆士数学”,
“预订开始”:“2016-01-20T18:00:00+10:00”,
“预订结束”:“2016-01-20T19:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“雅思”,
“预订开始”:“2016-01-20T10:00:00+10:00”,
“预订结束”:“2016-01-20T11:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“录制”,
“预订开始”:“2016-01-20T11:00:00+10:00”,
“预订结束”:“2016-01-20T12:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“录制”,
“预订开始”:“2016-01-20T12:00:00+10:00”,
“预订结束”:“2016-01-20T13:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“雅思”,
“预订开始”:“2016-01-20T13:00:00+10:00”,
“预订结束”:“2016-01-20T14:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“雅思”,
“预订开始”:“2016-01-20T15:00:00+10:00”,
“预订结束”:“2016-01-20T16:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“卢克”,
“预订开始”:“2016-01-20T16:00:00+10:00”,
“预订结束”:“2016-01-20T17:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“卢克”,
“预订开始”:“2016-01-20T17:00:00+10:00”,
“预订结束”:“2016-01-20T18:00:00+10:00”
}, {
“房间id”:“36616”,
“会议室名称”:“会议室2B”,
“预订标签”:“卢克”,
“预订开始”:“2016-01-20T18:00:00+10:00”,
“预订结束”:“2016-01-20T19:00:00+10:00”
}],
“最近更新”:“2016-01-20T12:40:36+10:00”
}
}
房间名预订人
会议室2A
会议室2B
会议室4B
第4A会议室
3E会议室
3D会议室
会议室3C
会议室3B
3A会议室
会议室2D
会议室2C
会议室2B
4D会议室
现在,它只打印出数组中的最后一项,而不是节点0-7之间的所有数据


编辑:从链接插入实时API提要不是很聪明,所以我将JSON数据剪切并粘贴到这个问题中。

您需要做的是首先迭代嵌套的JSON,并将每个房间的信息分组,如下所示:

// loop over the object and gather all the information for each room type  
var bookingsByRoom = {};
$.each(response.bookings.timeslots, function(i, timeslot) {
  var room = timeslot.room_name;
  if (bookingsByRoom[room]) bookingsByRoom[room].push(timeslot);
  else bookingsByRoom[room] = [timeslot];
});
/*
bookingsByRoom is now an object like:
{
  Meeting Room 2 A: {
    booking_end: "2016-01-20T11:00:00+10:00",
    booking_label: "Mahjong"
    booking_start: "2016-01-20T10:00:00+10:00"
    room_id: "36615"
    room_name: "Meeting Room 2A"
  }, {
    booking_end: "2016-01-20T12:00:00+10:00"
    booking_label: "Mahjong"
    booking_start: "2016-01-20T11:00:00+10:00"
    room_id: "36615"
    room_name: "Meeting Room 2A"
  }
}, 
{
  Meeting Room 2 B: ....
}

*/
然后,您可以在新创建的数组上循环并显示所需的任何数据


您需要做的是首先迭代嵌套的JSON,并将每个房间的信息分组,如下所示:

// loop over the object and gather all the information for each room type  
var bookingsByRoom = {};
$.each(response.bookings.timeslots, function(i, timeslot) {
  var room = timeslot.room_name;
  if (bookingsByRoom[room]) bookingsByRoom[room].push(timeslot);
  else bookingsByRoom[room] = [timeslot];
});
/*
bookingsByRoom is now an object like:
{
  Meeting Room 2 A: {
    booking_end: "2016-01-20T11:00:00+10:00",
    booking_label: "Mahjong"
    booking_start: "2016-01-20T10:00:00+10:00"
    room_id: "36615"
    room_name: "Meeting Room 2A"
  }, {
    booking_end: "2016-01-20T12:00:00+10:00"
    booking_label: "Mahjong"
    booking_start: "2016-01-20T11:00:00+10:00"
    room_id: "36615"
    room_name: "Meeting Room 2A"
  }
}, 
{
  Meeting Room 2 B: ....
}

*/
然后,您可以在新创建的数组上循环并显示所需的任何数据

我编写了javascript代码

// Using LibCal and JSONP
$.ajax({
url: "https://api2.libcal.com/1.0/room_bookings_nickname/?iid=3356&group_id=12306&key=92a47e5c854dee620cca071648c3fc41",

// The name of the callback parameter, as specified by the YQL service
jsonp: "callback",

// Tell jQuery we're expecting JSONP
dataType: "jsonp",

// Work with the response
success: function( response ) {
        console.log(response);
    var data = response.bookings.timeslots;
    var room  = {};
    var roomInfo = {};

    $.each(data, function(index,element){
        if(typeof room[element.room_id] === "undefined"){
        room[element.room_id] = [];
        roomInfo[element.room_id] = element.room_name;
      }
      room[element.room_id].push(element);
    });




    for(var roomId in room){
        var dest = room[roomId];
      var tr = $('<tr>');
      tr.append($('<td>'+roomInfo[roomId]+'</td>'));
      var td = $('<td>');
      for(var i=0; i<dest.length; i++){
        var item = dest[i];
        var div = $('<div></div>');
        div.text(item.booking_label+" ["+item.booking_start+" : "+item.booking_end+"]");
        td.append(div);
      }

      tr.append(td);

      $("table").append(tr);
    }

}
});
//使用LibCal和JSONP
$.ajax({
url:“https://api2.libcal.com/1.0/room_bookings_nickname/?iid=3356&group_id=12306&key=92a47e5c854dee620cca071648c3fc41",
//由YQL服务指定的回调参数的名称
jsonp:“回调”,
//告诉jQuery我们期待JSONP
数据类型:“jsonp”,
//与响应一起工作
成功:功能(响应){
控制台日志(响应);
var数据=response.bookings.timeslot;
变量室={};
var roomInfo={};
$.each(数据、函数(索引、元素){
if(房间类型[元素.房间\u id]=“未定义”){
房间[element.room_id]=[];
roomInfo[element.room\u id]=element.room\u名称;
}
房间[element.room\u id]。推送(element);
});
用于(房间中的var roomId){
var dest=房间[房间ID];
var tr=$('');
tr.append($(''+roomInfo[roomId]+'');
var td=$('');
对于(var i=0;i我编写了javascript代码

// Using LibCal and JSONP
$.ajax({
url: "https://api2.libcal.com/1.0/room_bookings_nickname/?iid=3356&group_id=12306&key=92a47e5c854dee620cca071648c3fc41",

// The name of the callback parameter, as specified by the YQL service
jsonp: "callback",

// Tell jQuery we're expecting JSONP
dataType: "jsonp",

// Work with the response
success: function( response ) {
        console.log(response);
    var data = response.bookings.timeslots;
    var room  = {};
    var roomInfo = {};

    $.each(data, function(index,element){
        if(typeof room[element.room_id] === "undefined"){
        room[element.room_id] = [];
        roomInfo[element.room_id] = element.room_name;
      }
      room[element.room_id].push(element);
    });




    for(var roomId in room){
        var dest = room[roomId];
      var tr = $('<tr>');
      tr.append($('<td>'+roomInfo[roomId]+'</td>'));
      var td = $('<td>');
      for(var i=0; i<dest.length; i++){
        var item = dest[i];
        var div = $('<div></div>');
        div.text(item.booking_label+" ["+item.booking_start+" : "+item.booking_end+"]");
        td.append(div);
      }

      tr.append(td);

      $("table").append(tr);
    }

}
});
//使用LibCal和JSONP
$.ajax({
url:“https://api2.libcal.com/1.0/room_b