Неверный ответ NativeScript getJSON

При попытке получить данные из 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"
}

Это не относится к вашему вопросу, но имеет значение корпус. Вы не получите правильное отображение значения, как оно написано. например imdbID !== imdbId

Ian MacDonald 27.05.2019 16:54
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Перед 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...

Eric 27.05.2019 16:59

Оказывается, JSON все время был в порядке, использование терминала в VS Code вместо NativeScript Sidekick сделало свое дело. Простите за неудобства.

Eric 31.05.2019 19:53

Другие вопросы по теме