Я пытаюсь получить API-интерфейс объекта JSON с сервера, и мой json начинается с объектов, и я не знаком с ответом Json, который сразу начинается с объектов.
{
"ABQ": {
"airport": {
"name": "Albuquerque International Airport",
"code": {
"iata": "ABQ",
"icao": "KABQ"
}
}
},
"ACE": {
"airport": {
"name": "Lanzarote Airport",
"code": {
"iata": "ACE",
"icao": "GCRR"
}
}
},
"ADB": {
"airport": {
"name": "Izmir Adnan Menderes International Airport",
"code": {
"iata": "ADB",
"icao": "LTBJ"
}
}
}
}
Мой код:
Data :any
getData(){
this.http.get("xxxxxxxx/", {}, {}).then(data =>{
this.Data = JSON.parse(data.data)
console.info(this.Data)
})
}
HTML
<div class = "ion-padding">
{{Data.airport.name}}
</div>
я получил ошибку
ERROR TypeError: Cannot read property 'airport' of undefined at object.eval
как я могу получить ответ json данных?
Ошибка не отображается! , но у меня пустая страница? и данные есть в консоли @AlexeySemerenko
хм, может, ng-if = "Data !== undefined" поможет?
Ваши данные ответа — это попытка объекта JSON {{Data.ABQ.airport.name}} или {{Data.ACE.airport.name}} или {{Data.ADB.airport.name}} и так далее.
Вы уверены, что это AngularJS? Не угловой?
@SudhirOjha, я не могу использовать ADB или ABQ, потому что они каждый раз меняются
ионный и угловой
или вы можете ввести локальную переменную isDataReadyToDisplay и в "then()" установить для нее значение true после this.Data = JSON.parse(data.data). И в представлении проверьте эту переменную в ng-if (например: <div ng-if = "isDataReadyToDisplay">...)
Тогда проблема заключается в том, что вы визуализируете свойства вложенных объектов до того, как получите данные с сервера, как указано выше, *ngIf должен работать на вас. Тем не менее, вы должны делать что-то с промежуточными свойствами, такими как ADB. Вы не можете просто игнорировать их
что вы получаете с console.info(data) ?
@SergeyMell Я не могу использовать ADB, потому что эти значения всегда меняются.
@AmadouBeye ERROR TypeError: Cannot read property 'name' of undefined
@AliGhassan, если данные поступают так, какой аэропорт вы хотите показать, в вашем ответе их 3 (я имею в виду, когда он динамический, как вы определяете, какой из них вы хотите просмотреть?)
@RezaRahmati, вы можете проверить мои данные json url [jsoneditoronline.org/?id=a478c3ea711f4345800c4d3e3434a804]
@SergeyMell посмотри мой URL jsoneditoronline.org/?id=a478c3ea711f4345800c4d3e3434a804
@AliGhassan, хорошо, но если ваш объект выглядит как {a: {smthDynamic: {b: value} }}, вы не можете получить его как a.b только потому, что промежуточное значение является динамическим, и вы его не знаете. Это сработает
@SergeyMell, так как лучше всего получить все эти данные? jsoneditoronline.org/?id=a478c3ea711f4345800c4d3e3434a804
Вы можете попробовать это <div *ngFor='let item of Data | keyvalue'> Name = {{Data[item.key].airport.name}} </div>
он сейчас работает, большое спасибо @SudhirOjha

У вас есть две проблемы в вашем примере:
Cannot read property XXX of undefinedСуществует несколько способов содрать шкуру с кошки, и есть несколько возможных решений. Один из них я реализовал в этом примере https://stackblitz.com/edit/angular-zuqbry.
async, чтобы дождаться разрешения ответа сервера
<p *ngFor = "let item of data | async">
{{item.airport.name}}
</p>
this.data = http.get()
.pipe(
map(response => {
const keys = Object.keys(response);
return keys.map(key => response[key]);
})
);
Обратите внимание, что http — это объект CustomHttpService, который я создал для предоставления данных из жестко запрограммированного файла, однако он работает очень похоже на оригинальный HttpClient.Вы можете проверить этот вопрос, пожалуйста? похож на мой
Извините, я не понял, что вы имеете в виду в вашем комментарии
Я имею в виду, проверьте этот вопрос, пожалуйста, stackoverflow.com/questions/56797773/…
Конечно, я сделаю через некоторое время
Кажется, ваш вопрос удален. По крайней мере, я получаю ошибку 404 страницы
мне жаль . эта ссылка stackoverflow.com/questions/56803700/…
мой вопрос в том, как я могу ввести ключи этих объектов в карту Google?
кажется, вы пытаетесь отобразить данные до того, как обещание будет разрешено. возможно, <div ng-If = "Data">{{Data.airport.name}}</div> решит проблему