【问题标题】:NativeScript getJSON malformed responseNativeScript getJSON 格式错误的响应
【发布时间】:2019-10-13 03:28:04
【问题描述】:

尝试从 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"
}

【问题讨论】:

  • 这并不能解决您的问题,但大小写很重要。您不会在写入时正确映射您的值。例如imdbID !== imdbId

标签: json typescript nativescript


【解决方案1】:

console log 之前,使用另一个then(我很确定你应该使用promise)和resolve 返回结果如下或reject 以防出错。您还可以在 catch 块中添加console log,以查看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 方法已经返回一个Promise,所以你不必return a new Promise 你可以在fetch 之后连接.then()。在我看来,使用resolvereject 会更好。 这应该可以解决问题。 另请参阅此处的本地脚本获取文档:Fetch

【讨论】:

  • 不工作,res.json() 不是一个函数...将响应转换为 JSON 字符串会给出正确的格式,但随后将字符串转换为 JSON 会返回相同的格式错误的 JSON...
  • 事实证明 JSON 一直都很好,在 VS Code 中使用终端而不是 NativeScript 的 Sidekick 就可以了。很抱歉给您带来不便。
猜你喜欢
  • 2016-05-20
  • 2013-07-31
  • 2015-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
  • 2021-01-12
  • 1970-01-01
相关资源
最近更新 更多