json - Reactjs中如何通过嵌套对象获取值
问题描述
我是 Reactjs 开发的新手,目前正在从事一个有趣的个人项目。所以我有 JSON 文件,内容是:
{
"btcinr": {
"base_unit": "btc",
"quote_unit": "inr",
"low": "479200.0",
"high": "509949.0",
"last": "500003.0",
"type": "SPOT",
"open": 493000.0,
"volume": "48.0567",
"sell": "503000.0",
"buy": "500003.0",
"at": 1584867246,
"name": "BTC/INR"
}
}
我的渲染方法中有以下代码:
import React from "react";
class App extends React.Component {
constructor(props){
super(props);
this.state = {
items : [],
isLoading: true,
}
}
componentDidMount() {
fetch('JSON API LINK')
.then(res => res.json())
.then((data) => {
this.setState({
items: data,
isLoading: false,
})
})
.catch(console.log)
}
render() {
const list = this.state.items.btcinr && Object.keys(this.state.items.btcinr);
console.log(list);
return (
<div>
{this.state.isLoading ? <h1>Fetching data </h1> :
list.map(
(ticker) =>
<li>{ticker}</li>
)
}
</div>
);}
}
export default App;
我想要的输出是 last 的值。但是当我通过 list.last 我得到错误
无法读取未定义的丙方“最后”。
解决方案
您的条件不正确,因为您将JSON作为响应,并且您需要检查项目状态中是否存在btcinr密钥,然后您需要在btcinr中提供可用的密钥列表。
此代码应该可以解决您的问题:
render() {
const { items } = this.state;
let list = [];
if(items.hasOwnProperty('btcinr')){
list = Object.keys(items.btcinr);
}
return (
<div>
{list.map(ticker => (
<li>{ticker}</li>
))}
</div>
);}
如果您想获得 btcinr 的最后一个属性,可以使用以下代码:
if(items.hasOwnProperty('btcinr')){
const last = items.btcinr.last;
}
如果您想从键列表中获取最后一个索引的值,那么您可以使用以下代码:
if(items.hasOwnProperty('btcinr')){
list = Object.keys(items.btcinr);
const last = list[list.length];
}
推荐阅读
- c# - 如何在注入前立即使用类?
- computer-vision - 哪个图像和视频注释工具可以让我们更正或编辑错误的注释?
- elasticsearch - Kibana Discover 中的 DSL 查询不能用作 Kibana 开发工具
- r - 如何将具有多个条目的单列拆分为多列
- c++ - ld.exe:找不到 -ldwrite 和 -ldwmapi
- android - 如何使用 Firebase 性能跟踪 Fragments 的帧指标?
- vue.js - 选择框选项在 DOM 上,但未显示在 Vue.js 的引导选择下拉列表中
- c++ - 如何解析PE文件不使用API
- regex - 如何在 Hive 中构建正则表达式以获取字符串,直到第 N 次出现分隔符
- excel - 如何从excel读取公式对应的值到talend?