使用TMDb API意外结束JSON输入

问题描述 投票:0回答:2

我试图解析从电影数据库返回的JSON数据。我收到错误告诉我,我收到以下错误:

Uncaught SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at XMLHttpRequest.movieReq.onreadystatechange (discover.js:34)
    at loadIMDBDetails (discover.js:38)
    at MainFunc (discover.js:68)
    at discover.js:5
I am accessing individual movie information using the following XMLHttpRequest:

movieReq.open('GET','https://api.themoviedb.org/3/movie/299537?api_key=',false);

我有其他XMLHttpRequests正在返回JSON数据。这些请求正在使用API​​的发现功能。

这是产生问题的功能

function loadIMDBDetails(mO, i) {
    movieReq = new XMLHttpRequest();

    movieReq.onreadystatechange = function () {
        var parsedObj = JSON.parse(movieReq.responseText);
        mO.imdbId = parsedObj['imdb_id'];
    };
    movieReq.open('GET', 'https://api.themoviedb.org/3/movie/299537?api_key=34f8307d9addabf7924eab7f22cabb23', false);
    movieReq.send();
}

When using console.log to return the responseText, this is the result:

{ “成人”:假的, “backdrop_path”: “/ w2PMyoyLU22YvrGK3smVM9fW1jj.jpg”, “belongs_to_collection”:空, “预算”:1.52, “流派”:[{ “ID”:28, “名”: “行动”} ,{“id”:12,“name”:“Adventure”},{“id”:878,“name”:“Science Fiction”},“homepage”:“https://www.marvel.com/movies/captain-marvel”,“id”:299537,“ imdb_id“:”tt4154664“,”original_language“:”en“,”original_title“:”奇迹上尉“,”概述“:”故事讲述了卡罗尔·丹弗斯,因为当地球陷入其中时,她成为宇宙中最强大的英雄之一两个外星人种族之间的银河战争的中间。在20世纪90年代,漫威船长是漫威电影宇宙历史上一个以前看不见的时期的全新冒险。“,”人气“:419.096,”poster_path“:” /AtsgWhDnHTq68L0lLsUrCnM7TjG.jpg","production_companies":[{"id":420,"logo_path":"/hUzeosd33nzE5MCNsZxCGEKTXaQ.png","name":"Marvel Studios“,”origin_country“:”US“}],”production_countries “:[{”iso_3166_1“:”US“,”name“:”United States of America“}],”release_date“:”2019-03-06“,”收入“:910298835,”runtime“:124,”说_Languages “:[{” iso_639_1 “:” 恩 “ ”名“: ”英语“}], ”状态“: ”被释放“, ”口号“:” 更高。进一步。更快。“,”标题“:”Marvel上尉“,”视频“:false,”vote_average“:7.3,”vote_count“:2885}

javascript json
2个回答
1
投票

事实证明我忘了为onreadystatechange事件添加一个检查。我添加了以下检查并在if语句中运行了json解析,这解决了我的问题!

movieReq.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        var parsedObj = JSON.parse(movieReq.responseText);
        mO.imdbId = parsedObj['imdb_id'];
    }
};


0
投票

如果我在你回到console.log(movieReq.responseText)线上时正确理解了你的问题:

var parsedObj = JSON.parse(movieReq.responseText);

你得到了正确的JSON,对吗?

如果是这样,这意味着您不需要使用函数JSON.parse(),您可以直接访问对象movieReq.responseText的任何元素,在您的情况下,您可以访问movieReq.responseText.imdb_id而无需解析它(因为它是已经是一个JSON对象)。

如果要将字符串转换为JSON对象,则只需使用JSON.parse(),有关详细信息,请查看:https://www.w3schools.com/js/js_json_parse.asp

© www.soinside.com 2019 - 2024. All rights reserved.