我知道有很多关于如何处理JSON的问题,我已经尝试了很多,但我真的被卡住了。
我想要达到的目的如下:
我加载了一个JSON,在那个JSON中,有关于照片的信息。每张照片都有几个属性,其中一个是纬度和经度。这些属性并没有为所有照片指定。我希望最后有一个JSON对象,它只包含带有lat / long值的照片。
JSON看起来像这样:
{
"current_page": 1,
"total_pages": 2,
"total_items": 27,
"photos": [{
"id": 63151715,
"user_id": 430997,
"name": "Footsteps",
"description": "Traces in the dunes",
"camera": "Canon EOS 5D Mark II",
"lens": null,
"focal_length": "23",
"iso": "50",
"shutter_speed": "30",
"aperture": "9",
"times_viewed": 500,
"rating": 44.2,
"status": 1,
"created_at": "2014-03-08T06:02:13-05:00",
"category": 8,
"location": null,
"latitude": 52.399774296136734,
"longitude": 4.558639526367187
还有一些属性和照片。我已经验证了它,这似乎没问题。
var json = $.getJSON("https://api.500px.com/v1/photos?feature=user&username=bzwemmer&consumer_key=XXX",
function (json) {
console.log(json);
});
var jobj = $.parseJSON(json);
for (var i = 0; i < jobj.length; i++) {
var type = "point";
// Path from json from Firebug = json.responseJSON.photos[0].latitude
var lat = json.responseJSON.photos[0].latitude;
console.log(lat);
if (lat !== null || lat !== "") {
geoobj.photos.push({
lat: photos.lat,
lon: photos.lon,
name: photos.name,
image_url: photos.image_url
});
}
}
我想选择几个属性并将它们放在另一个JSON中进行进一步处理。但是,对于我尝试的所有内容,我在Firebug中收到lat = undefined的消息。
我希望有人知道我哪里出错了,因为我再也看不到了。
答案 0 :(得分:3)
您正在尝试访问回调函数之外的结果。不起作用。总是在回调函数内处理结果。尝试下面的代码。
<script type='text/javascript'>
$.getJSON("https://api.500px.com/v1/photos?feature=user&username=bzwemmer&consumer_key=XXX", function(json) {
var jobj = $.parseJSON(json);
$(jobj.photos).each(function(ind, val){
if(val.latitude != "" && val.longitude != "") {
geoobj.photos.push({
lat: val.latitude,
lon: val.longitude,
name: val.name,
image_url: val.image_url});
}
});
});
</script>
答案 1 :(得分:0)
如果您的json有效,它应该有效,请查看此jsfiddle sample,
以下是简化版
var jsonObj={
"current_page":1,
"total_pages":2,
"total_items":27,
"photos":
[{"latitude":52.399774296136734,
"longitude":4.558639526367187}]
};
alert(jsonObj.photos[0].latitude);
答案 2 :(得分:0)
您应该接受Rashmin Javiya&#39; answer。 我开始以同样的方式回答,但她打败了我!
以下是代码的固定版本,用于处理分页并编写一些调试输出。
var geoobj = {photos:[]};
var missingLLcounter = 0;
(function getPhotos(page) {
var request = "https://api.500px.com/v1/photos?feature=user&username=bzwemmer&consumer_key=ByGjMRRao3aAozGsq6HuxZmJfA6ufWzNL32VPplp&page="+page;
console.log('getting page '+page+': '+request);
$.getJSON(request, function (json) {
$(json.photos).each(function(ind, val) {
if(val.latitude && val.longitude) {
geoobj.photos.push({
lat: val.latitude,
lon: val.longitude,
name: val.name,
image_url: val.image_url
});
} else {
missingLLcounter++;
}
});
console.log('done with page '+page+', '+(json.total_pages-page)+' pages to go.');
if(json.total_pages>page) {
getPhotos(++page);
} else {
console.log('done! retrieved '+page+' page'+(page>1?'s':'')+' with '+(geoobj.photos.length+missingLLcounter)+' total records ('+missingLLcounter+' were missing lat/lngs).');
}
});
})(1);