При попытке получить данные из OMDb API, в Postman результат возвращается нормально, а функция getJSON возвращает неструктурированные данные
Я уже пробовал использовать типизированный интерфейс
export interface ApiResponse {
Search: Movies[];
totalResults: string;
Response: string;
}
export interface Movies {
title: string;
year: number;
poster: string;
imdbId: string;
type: string;
}
Это код getJSON
return getJSON<any>(
this.apiUrl + this.apiKey + "&s=Harry-potter&page10"
).then(r => {
console.info(r);
});
который возвращает то json искаженный
LOG from device : {
LOG from device : "imdbID": "tt1201607",
LOG from device : "Type": "movie",
LOG from device : "Poster": "https://m.media-amazon.com/images/M/MV5BMjIyZGU4YzUtNDkzYi00ZDRhLTljYzctYTMxMDQ4M2E0Y2YxXkEyXkFqcGdeQXVyNTIzOTk5ODM@._V1_SX300.jpg"
LOG from device : },
LOG from device : {
LOG from device : "Year": "2011",
LOG from device : "Search": [
LOG from device : "Title": "Harry Potter and the Deathly Hallows: Part 2",
LOG from device : {
LOG from device : "Title": "Harry Potter and the Sorcerer's Stone",
LOG from device : "Year": "2001",
LOG from device : "imdbID": "tt0241527",
LOG from device : "Type": "movie",
LOG from device : },
LOG from device : {
LOG from device : "Title": "Harry Potter and the Chamber of Secrets",
LOG from device : "Poster": "https://m.media-amazon.com/images/M/MV5BNjQ3NWNlNmQtMTE5ZS00MDdmLTlkZjUtZTBlM2UxMGFiMTU3XkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SX300.jpg"
Ожидая такого возврата от Почтальона:
{
"Search": [
{
"Title": "Harry Potter and the Deathly Hallows: Part 2",
"Year": "2011",
"imdbID": "tt1201607",
"Type": "movie",
"Poster": "https://m.media-amazon.com/images/M/MV5BMjIyZGU4YzUtNDkzYi00ZDRhLTljYzctYTMxMDQ4M2E0Y2YxXkEyXkFqcGdeQXVyNTIzOTk5ODM@._V1_SX300.jpg"
},
{
"Title": "Harry Potter and the Sorcerer's Stone",
"Year": "2001",
"imdbID": "tt0241527",
"Type": "movie",
"Poster": "https://m.media-amazon.com/images/M/MV5BNjQ3NWNlNmQtMTE5ZS00MDdmLTlkZjUtZTBlM2UxMGFiMTU3XkEyXkFqcGdeQXVyNjUwNzk3NDc@._V1_SX300.jpg"
},
{
"Title": "Harry Potter and the Chamber of Secrets",
"Year": "2002",
"imdbID": "tt0295297",
"Type": "movie",
"Poster": "https://m.media-amazon.com/images/M/MV5BMTcxODgwMDkxNV5BMl5BanBnXkFtZTYwMDk2MDg3._V1_SX300.jpg"
}
],
"totalResults": "80",
"Response": "True"
}
Перед console log
используйте другой then
(я уверен, что вы должны сделать это с промисом) и resolve
возвращаемый результат следующим образом или reject
в случае ошибки. Вы также можете добавить console log
в блок catch, чтобы увидеть тело error
:
return new Promise((resolve, reject) => {
fetch(
this.apiUrl + this.apiKey + "&s=Harry-potter&page10"
)
.then(res => res.json())
.then(r => {
console.info(r);
resolve(r)
})
.catch(err => reject(err))
})
Метод fetch
уже возвращает Promise
, поэтому вам не нужно return a new Promise
, вы можете просто объединить .then()
после fetch
. На мой взгляд, лучше использовать resolve
и reject
.
Это должно решить проблему.
Также см. документацию по выборке в Native Script здесь: Принести
Не работает, res.json() не является функцией... Преобразование ответа в строку JSON дает ему правильный формат, но затем преобразование строки в JSON возвращает тот же искаженный JSON...
Оказывается, JSON все время был в порядке, использование терминала в VS Code вместо NativeScript Sidekick сделало свое дело. Простите за неудобства.
Это не относится к вашему вопросу, но имеет значение корпус. Вы не получите правильное отображение значения, как оно написано. например
imdbID !== imdbId