2017-07-07 29 views
1

我遇到的問題深入到一個json對象中,該對象中有一個數組。我遇到的問題是,當我進入該對象時,它返回對象Object。如何解析json對象中的數組

我的代碼如下所示:

(function(){ 
    var rivetAPI = "https://url"; 
    $.ajax({ 
      url:rivetAPI, 
      type:"GET", 
      dataType:"json", 
      success: function(obj){ 
      //var myData = JSON.stringify(obj); 

      $.each(obj.data, function(index, value){ 
      $('.data').text(value); 
      }) 
     } 
    }); 
})(); 

我保持URL私人的,而是想表明,它是從一個HTTPS來以防萬一這可能是問題的一部分。

的JSON格式爲這樣:

{ "data": [ 
    { 
    "likes": 10, 
    "imageURL": "url", 
    "mediaThumbURL": "url", 
    "mediaDisplayURL": null, 
    "mediaOriginalURL": "url", 
    "userProfilePictureURL": null, 
    "externalLink": null, 
    "description": "The sun was setting behind the mounted memorial to Kaiser Wilhelm I. (30 May 2015)", 
    "mediaType": "Photo", 
    "caption": "Sunset behind the memorial to Wilhelm I, Koblenz, Germany", 
    "latitude": 50.364437, 
    "longitude": 7.605915, 
    "mediaID": "e9908afe-c9e1-11e5-829e-22000ae606bd", 
    "userName": null, 
    "googlePlaceId": "ChIJnX0jdld7vkcRYLPaENXUIgQ", 
    "locationText": "Koblenz", 
    "identifier": { 
     "type": "MemberActivity", 
     "id": "e9908afe-c9e1-11e5-829e-22000ae606bd" 
    }, 
    "tags": { 
     "itinerary": [ 
      "rhinegetaway" 
     ], 
     "season": [ 
      "spring" 
     ], 
     "cruise-itinerary": [ 
      "rhine-getaway" 
     ], 
     "_country": [ 
      "DE" 
     ], 
     "_city": [ 
      "lutzel" 
     ] 
    }, 
    "source": { 
     "type": "ProjectActivity", 
     "id": "54b97332-b9e4-11e3-876f-22000a240faf" 
    }, 
    "valid": true 
    }, 
    { 
    "likes": 10, 
    etc.... 

    } 
} 
+0

您正在將對象轉換爲字符串。你期望看到什麼結果? – zzzzBov

+0

我想弄清楚如何進入「數據」對象,並能夠將喜歡和圖像對象的東西顯示到DOM中。但是,現在當我嘗試循環「數據」時。它用[object Object]返回。我評論了我的字符串,所以它應該仍然是一個對象。 – kirdua

+0

您的對象包含嵌套對象,因此多次'value'不會是一個字符串,而是一個對象。如果你輸出,那就是你得到的。此外,你一直覆蓋你的循環中的文本內容,所以只有最後一個'值'是可見的,恰好是這樣的嵌套對象。 – trincot

回答

-1

您遇到這個問題,因爲你是遍歷對象的數組,併爲此你必須使用嵌套循環如下(更換您的回調代碼下面的函數):

function callback(obj){ 
    $.each(obj.data, function(index, element){ 
     // this outer loop will iterate over each object in array 
     $.each(element, function(key, value){ 
      // this inner loop will iterate over each value in object 
      if(value instanceof Object){ 
      // element is object parse it accordingly 
      // you can apply parse logic based on key; as each object is of different type. 
      }else{ 
      $('.data').text(value); 
      } 
     }); 
    }); 
} 

這個循環將顯示一個對象,你不必訪問個人財產一樣value.likes的所有屬性。但是,您必須爲具有對象作爲其值的鍵編寫解析器。顯然這是顯示對象所有屬性的解決方案。如果您只想訪問幾個屬性,則刪除內部循環並以element.likes的身份訪問這些屬性。

+0

爲什麼您將此答案標記爲投票?我確實指出了你的代碼的問題,並提出了可能的解決方法。這不公平。 – Zeeshan

+0

我沒有投票。 – kirdua

-1

在你的循環,value仍然將持有的對象(數組data是對象之一),如果你把那個給.text(),你會得到object Object就像任何其他對象。

您可以訪問該對象的個別屬性的循環:

$.each(obj.data, function(index, value){ 
    $('.data').text(value.likes); // etc. 
}) 

正如在評論中提到,這將覆蓋每迭代.data元素的內容,所以可能還沒有產生預期結果。

編輯:如果你想顯示所有喜歡,你將不得不組裝要先顯示的字符串,然後更新您的HTML。

var likes = []; 

$.each(obj.data, function(index, value){ 
    likes.push(value.likes); 
}); 

$('.data').text(likes.join(', ')); 

這當然可以做到「更好」與.reduce,但需要JS的一個更基本的瞭解。

+0

我試過了,它返回數組中的最後一個。有沒有辦法顯示所有喜歡?如'$('。data').text(value.likes [index]);'? – kirdua

+0

@kirdua我已經更新了答案來反映這一點 - 您需要重構您的代碼以實現您的目標。 – mvuajua