首页 > 解决方案 > 解析 json 对象显示未定义

问题描述

我正在使用OMDBapi来获取不同电影的详细信息。我成功地获取了结果,它返回了一个像这样的 json 对象;

{"Title":"WWA: The Inception","Year":"2001","Rated":"N/A","Released":"26 Oct 2001","Runtime":"N/A","Genre":"Action, Sport","Director":"N/A","Writer":"Jeremy Borash","Actors":"Bret Hart, Jeff Jarrett, Brian James, David Heath","Plot":"N/A","Language":"English","Country":"Australia","Awards":"N/A","Poster":"https://m.media-amazon.com/images/M/MV5BNTEyNGJjMTMtZjZhZC00ODFkLWIyYzktN2JjMTcwMmY5MDJlXkEyXkFqcGdeQXVyNDkwMzY5NjQ@._V1_SX300.jpg","Ratings":[{"Source":"Internet Movie Database","Value":"6.0/10"}],"Metascore":"N/A","imdbRating":"6.0","imdbVotes":"22","imdbID":"tt0311992","Type":"movie","DVD":"N/A","BoxOffice":"N/A","Production":"N/A","Website":"N/A","Response":"True"}

请注意,如果我们想获取特定电影的详细信息,我们会从 api 获取这种类型的对象,这就是我正在做的事情。现在为了向用户显示不同的细节,我开始解析这个 JSON 对象,它工作正常,但是当我尝试获取键中Value存在的Ratings键的值时,它返回未定义。

我正在使用 react-native。获取数据后,我将其存储在 state 中,命名为details. 然后得到它;

this.state.details.Title //if i wanted to get the Title and it works fine.

然后为Value里面Ratings

this.state.details.Ratings[0].Value

但它返回未定义。

另请注意,这在纯 Javascript 中运行良好,因为我以相同的方式在浏览器控制台中解析 dict 并返回正确的值。

这是更多代码;

componentDidMount() {
    this.fetchData();
}

fetchData = async () => {
    const response = await fetch(`http://www.omdbapi.com/?i=${this.props.navigation.getParam('i')}&apikey=******`) // where this.props.navigation.getParam('i') is the omdbid of the movie
    const result = await response.json()
    this.setState({details: result})
    
} 

这是错误日志;

undefined is not an object (evaluating 'this.state.details.Ratings[0]')

标签: jsonreact-nativeparsing

解决方案


如果您从对象访问的 value 属性可能不适用于您从 API 响应获取的数据中的所有电影,则可能会导致您在访问未定义对象的键时出错。

为了克服这个问题,有一种方法,您可以尝试如下修复:

this.state.details.Ratings[0]?.Value

这 ?当值键在对象中不可用时,符号让 javascript 不会给出错误。它将使属性的访问成为可选的。


推荐阅读