首页 > 解决方案 > 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.log(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"
}

标签: jsontypescriptnativescript

解决方案


在 之前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.log(r);
            resolve(r)
        })
        .catch(err => reject(err))
})

fetch方法已经返回 a ,因此您Promise不必在. 在我看来,使用and更好。这应该可以解决问题。另请参阅此处的 Native Script 中获取的文档:Fetchreturn a new Promise.then()fetchresolvereject


推荐阅读