如何解析json对象中的数组

时间:2017-07-07 20:22:36

标签: jquery json

我在向下挖掘到一个包含数组的json对象时遇到了问题。我遇到的问题是,当我进入该对象时,它返回对象Object。

我的代码如下所示:

(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);
           })
      }
   });
})();

我保持网址私密,但希望显示它来自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....

  }
}

2 个答案:

答案 0 :(得分:-1)

您遇到此问题是因为您正在循环遍历对象数组,为此您必须使用嵌套循环,如下所示(使用以下函数替换您的回调代码):

f <- function(x) {
    if(is.null(x)) data.frame(a = NA, b = NA) else x
}

此循环将显示您不必访问单个属性(如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访问这些属性。

答案 1 :(得分:-1)

在你的循环中,value仍会保留一个对象(data所在的数组中的一个对象),如果你将其提交给.text(),你就可以了。 ll得到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(', '));

这当然可以完成&#34;更好&#34;使用.reduce,但这需要对JS有更基本的了解。