我在向下挖掘到一个包含数组的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....
}
}
答案 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有更基本的了解。