#javascript #json #rest
#javascript #json #остальное
Вопрос:
Как новичок, я, честно говоря, не знаю, содержат ли вопросы, которые я рассмотрел (многие), уже ответ, который мне нужен. Я полностью взломал код из различных статей / ресурсов, так что это может быть некрасиво.
Я подключаю канал REST API и фильтрую на основе нужных мне данных. Если в ленте JSON нет изображения, код останавливается, и вот тут я застрял. Я хотел бы загрузить изображение по умолчанию (default-image.jpg ), когда изображение отсутствует в ленте API.
var boatHeaders = new Headers();
boatHeaders.append("Accept", "application/vnd.dmm-v1 json");
var requestOptions = {
method: 'GET',
headers: boatHeaders,
redirect: 'follow'
};
fetch("https://api.boats.com/inventory/search?fields=MakeString,Model,ModelYear,NominalLength,NormPrice,BoatLocation,Imagesamp;key=x?x?x?x?x?x?x?", requestOptions)
.then(function (response) {
return response.json();
})
.then(function (boatData) {
loadTableData(boatData);
})
.catch(function (err) {
console.log(`Error: ` err);
})
function loadTableData(boatData) {
const boats = Object.values(boatData.results);
for (let boat of boats) {
console.log(boat.Images[0].Uri, boat.NominalLength, boat.MakeString ', ' boat.Model, boat.ModelYear, boat.NormPrice, boat.BoatLocation.BoatCityName ', ' boat.BoatLocation.BoatStateCode);
}
}
Примечание: я опустил ключ API по соображениям безопасности и включаю первые записи x3 из JSON (у 2-го объекта нет изображения);
{
"BoatLocation": {
"BoatCityName": "Niantic",
"BoatCountryID": "US",
"BoatStateCode": "CT"
},
"MakeString": "Pro Line",
"ModelYear": 2006,
"Model": "Express",
"NominalLength": "35 ft",
"NormPrice": 139900,
"Images": [
{
"Priority": "0",
"Caption": "Photo 1",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_1.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:39-08:00"
},
{
"Priority": "1",
"Caption": "Motors",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_2.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:39-08:00"
},
{
"Priority": "2",
"Caption": "Helm",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_3.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:40-08:00"
},
{
"Priority": "3",
"Caption": "Seating",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_4.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:40-08:00"
},
{
"Priority": "4",
"Caption": "Forward Berth",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_5.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:40-08:00"
},
{
"Priority": "5",
"Caption": "Dinette",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_6.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:40-08:00"
},
{
"Priority": "6",
"Caption": "Aft Berth",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_7.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:40-08:00"
},
{
"Priority": "7",
"Caption": "Head",
"Uri": "https://imt.boatwizard.com/images/1/61/66/3366166_0_140320111653_8.jpg",
"LastModifiedDateTime": "2011-03-14T16:53:40-08:00"
}
]
}
{
"BoatLocation": {
"BoatCityName": "Greenwich",
"BoatCountryID": "US",
"BoatStateCode": "CT"
},
"MakeString": "Sea Ray",
"ModelYear": 2002,
"Model": "36 DA",
"NominalLength": "36 ft",
"NormPrice": 159995
}
{
"BoatLocation": {
"BoatCityName": "Greenwich",
"BoatCountryID": "US",
"BoatStateCode": "CT"
},
"MakeString": "Grady-White",
"ModelYear": 2005,
"Model": "",
"NominalLength": "20 ft",
"NormPrice": 29995,
"Images": [
{
"Priority": "0",
"Caption": "Photo 1",
"Uri": "https://imt.boatwizard.com/images/1/61/68/3366168_0_140320111820_1.jpg",
"LastModifiedDateTime": "2011-03-14T18:20:17-08:00"
},
{
"Priority": "1",
"Caption": "Photo 2",
"Uri": "https://imt.boatwizard.com/images/1/61/68/3366168_0_140320111820_2.jpg",
"LastModifiedDateTime": "2011-03-14T18:20:18-08:00"
},
{
"Priority": "2",
"Caption": "Photo 3",
"Uri": "https://imt.boatwizard.com/images/1/61/68/3366168_0_140320111820_3.jpg",
"LastModifiedDateTime": "2011-03-14T18:20:18-08:00"
}
]
}
Вот рабочая функция loadTableData, использующая решение, которое я одобрил.
function loadTableData(boatData) {
const boats = Object.values(boatData.results);
//console.log(boats)
for (let boat of boats) {
const defaultUri = "default-image.jpg";
let img = defaultUri;
if (boat.Images amp;amp; boat.Images[0] amp;amp; boat.Images[0]) {
img = boat.Images[0].Uri;
}
console.log(img, boat.NominalLength, boat.MakeString ', ' boat.Model, boat.ModelYear, boat.NormPrice, boat.BoatLocation.BoatCityName ', ' boat.BoatLocation.BoatStateCode);
}
}
Ответ №1:
Если Images
поле может быть undefined
, вы должны увидеть, определено ли Images
свойство или нет.
for (let boat of boats) {
const defaultUri = "default-image.jpg"
const img = boat.Images amp;amp; boat.Images[0] amp;amp; boat.Images[0].Uri || defaultUri
// do something with img
}
Вы можете использовать операторы if вместо операторов ‘amp;amp;’.
for (let boat of boats) {
const defaultUri = "default-image.jpg"
let img = defaultUri
if (boat.Images amp;amp; boat.Images[0] amp;amp; boat.Images[0].Uri) {
img = boat.Images[0].Uri
}
// do something with img
}
Комментарии:
1. Почему
amp;amp; boat.Images[0] amp;amp; boat.Images[0]
? Это избыточно
Ответ №2:
Вы можете сделать что-то вроде
console.log( boat.Images[0] ? boat.Images[0].Uri : "default-image.jpg")
который называется троичным оператором. Это сокращенная форма :
if(boat.Images[0]){
console.log(boat.Images[0].Uri);
} else {
console.log("default-image.jpg")
}
Комментарии:
1. Спасибо, что нашли время вернуться и предложить решение. Я выбрал @c0m1t, поскольку он был первым в списке.
2. Я пытался проголосовать, но мне не хватает похвалы >> «Спасибо за отзыв! Голоса, поданные лицами с репутацией менее 15, записываются, но не изменяют публично отображаемую оценку публикации «.
Ответ №3:
добавьте if condition
, если получите изображение из api, установите это изображение, иначе добавьте свое изображение
if(boat.Images[0].Uri==null||boat.Images[0].Uri==undefind){
console.log("default image ")
}
else{
console.log(boat.Images[0].Uri)
}
Комментарии:
1. Спасибо, что нашли время вернуться и предложить решение. Я выбрал @c0m1t, поскольку он был первым в списке.
2. Этот код сломается, если
boat.Images[0]
не определено. Сначала вы не проверяете его существование.