2017-04-04 27 views
1

我想挑從我JSON響應文本的一些數據,看起來像這樣:試圖從一個JSON響應文本挑數據

{ 
    "status": "success", 
    "reservations": [ 
     { 
     "id": "22959", 
     "subject": "SubjectName", 
     "modifiedDate": "2017-04-03T06:04:24", 
     "startDate": "2017-04-03T12:15:00", 
     "endDate": "2017-04-03T17:00:00", 
     "resources": [ 
      { 
       "id": "17", 
       "type": "room", 
       "code": "codeName", 
       "parent": { 
        "id": "2", 
        "type": "building", 
        "code": "buildingName", 
        "name": "" 
       }, 
       "name": "" 
      }, 
      { 
       "id": "2658", 
       "type": "student_group", 
       "code": "groupCode", 
       "name": "groupName" 
      }, 
      { 
       "id": "2446", 
       "type": "student_group", 
       "code": "groupCode", 
       "name": "groupName" 
      }, 
      { 
       "id": "3137", 
       "type": "realization", 
       "code": "codeName", 
       "name": "" 
      }, 
      { 
       "id": "3211", 
       "type": "realization", 
       "code": "codeName", 
       "name": "name" 
      } 
     ], 
     "description": "" 
     }, 
{ 
     "id": "22960", 
     "subject": "subjectName", 
     "modifiedDate": "2017-04-04T06:04:33", 
     "startDate": "2017-04-04T10:00:00", 
     "endDate": "2017-04-04T16:00:00", 
     "resources": [ 
      { 
       "id": "17", 
       "type": "room", 
       "code": "codeName", 
       "parent": { 
        "id": "2", 
        "type": "building", 
        "code": "codeName", 
        "name": "" 
       }, 
       "name": "" 
      }, 
      { 
       "id": "2658", 
       "type": "student_group", 
       "code": "groupCode", 
       "name": "groupName" 
      }, 
      { 
       "id": "2446", 
       "type": "student_group", 
       "code": "groupCode", 
       "name": "groupName" 
      } 
     ], 
     "description": "" 
     } 
] 
} 

我一直在嘗試使用JSON.parse()來和通過一個for循環來處理響應文本,但沒有成功。我需要選擇主題名稱,房間名稱,建築名稱和兩個student_group名稱。

這是我的代碼目前的樣子:

var getData = { 
       "startDate":, 
       "endDate":, 
       "studentGroup": [ 
       ""] 
      }; 



var data = new XMLHttpRequest(); 
      data.onreadystatechange = function() {    
       if (data.readyState == 4 && data.status == 200) { 

        try { 
         // Parse JSON 
         var json = JSON.parse(data.responseText); 
         // for-loops 
         for (var i = 0; i < json.reservations.length; i++) { 
          for (var x = 0; x < json.reservations[i].length; 
          x++) { 
           document.getElementById("test").innerHTML = 
           json.reservations[i].subject; 
          } 
         } 

        } catch (err) { 
         console.log(err.message); 
         return; 
        } 
       } 
      };   

      // JSON query 
      data.open("POST", "URL", true, "APIKEY", "PASS"); 
      data.setRequestHeader('Content-Type', 'application/json'); 
      data.send(JSON.stringify(getData)); 

僅打印最後一個主題名稱,如果我有超過1人。

我該怎麼做?

+0

你已經試圖獲取你的數據,你沒有發佈任何代碼。 –

+0

我試圖用'for(var i = 0; i IlariM

+0

而不是將其放入評論中,用代碼更新您的問題。你迭代你的responseText,你應該迭代你的保留,所以而不是'我

回答

0

你應該把你的分析數據爲對象,所以讓你去,這將讓所有返回的資源都是唯一的學生組名:

var studentGroups = []; 

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 resource = json.reservations[i].resources[j]; 
      if(resource.type === "student_group"){ 
       if(studentGroups.indexOf("groupName")) 
        studentGroups.push(resource.name); 
       } 
      } 
     } 
    } 
} 

當然,我不知道在你想要什麼樣的格式來獲得你的結果(這應該是一個平面數組還是另一個JSON,也許只有第一個值對你很重要?),但是我認爲你應該已經有了一個想法來處理這個話題。

+0

謝謝。現在讓我的代碼工作 – IlariM

1

一旦你解析了你的數據,就忘記它曾經是JSON。現在你有一個JavaScript對象。

  • 檢查data.status以確保一切順利。
  • data.reservations之上循環,並在內部超過data.reservations[i].resources