json - 解析 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]')
解决方案
如果您从对象访问的 value 属性可能不适用于您从 API 响应获取的数据中的所有电影,则可能会导致您在访问未定义对象的键时出错。
为了克服这个问题,有一种方法,您可以尝试如下修复:
this.state.details.Ratings[0]?.Value
这 ?当值键在对象中不可用时,符号让 javascript 不会给出错误。它将使属性的访问成为可选的。
推荐阅读
- python - 值查看/修改窗口
- c# - ACTIVEMQ + NMS 无法同步接收
- python-3.x - 来自 codewars 站点的 BLOCK 序列挑战(Python 3)
- c - 如何将“虚拟”参数传递给 C 中的函数?
- vue.js - 如何在不使用router.js的情况下在nuxt中添加大写的页面名称?
- c++ - 文件系统库的编译器错误:clang 和 g++
- javascript - Stripe:为未来的支付设置一张经过 3d 安全认证的卡
- python-3.x - python3使用通配符检查和移动os.path.exists和shutil.move或与数字匹配
- java - 从 RestApi 、 Retrofit 和 Rxjava 一个接一个地获取大的 json?
- python - 来自 dat 文件的数组数组