我真的对学习ES6和JQuery感到陌生,所以如果我问一个已经重复的问题(没有找到类似的问题),我深表歉意。
我目前正在尝试从JSON文件中获取数据,以使其工作如下
{
EUR: { code: "EUR", symbol: "€", rate: "5,278.0518", … }
GBP: { code: "GBP", symbol: "£", rate: "4,640.1577", … }
USD: { code: "USD", symbol: "$", rate: "6,152.3500", … }
}
这是我到目前为止的代码:
class App extends Component {
constructor(props){
super(props)
this.state = {}
this.performSearch()
}
performSearch(){
const urlString = "https://api.coindesk.com/v1/bpi/currentprice.json";
$.ajax({
dataType: 'json',
url: urlString,
success: data => {
console.log("This is in my data", data["bpi"])
}
})
}
render() {
return (
<div className="App">
<p>This is a testing p</p>
</div>
);
}
}
我要遍历数据[“ bpi”],以便可以遍历字典中的所有键和值。
但是,由于data [“ bpi”]的dataType是未定义的,因此我不能在此处使用forEach()方法。
那么我该如何处理而不必对所有内容进行硬编码? (即当我执行console.log(data [“ bpi”] [“ EUR”])时有效)
感谢您的帮助
答案 0 :(得分:2)
您可以使用Object.keys
将json对象转换为数组,然后对其进行迭代。
Object.keys(data["bpi"]).map(key => data["bpi"][key]).forEach(item => console.log(item))
答案 1 :(得分:0)
这里有几件事。
data["bpi"]
或data.bpi
不应未定义。在这种情况下,它应该是具有3个键的对象。
检查该数据如何返回。如果它以JSON形式返回,则可以调用JSON.parse(data)
来将JSON对象中的数据解析为JavaScript对象,然后可以循环遍历。
接下来,要遍历对象中的键data.bpi
,不能使用.forEach
,因为这是一个Array方法。但是,您可以使用for.. in
循环。
正如其他人所述,您还可以使用Object.keys
将对象转换为其对象的数组,然后在其上运行forEach
。
const parsedData = JSON.parse(data)
for(var key in parsedData.bpi) {
// do something here...
}
Object.keys(parsedData.bpi).forEach(key => parsedData.bpi[key] /* do something */ )
答案 2 :(得分:0)
要遍历对象,您可以按照以下步骤进行操作:
for(var keys in obj){
var value = obj[key]
.....
}
所以
var keys = Object.keys(obj)
for(var i =0; i<keys.length; i++){
var value = obj[keys[i]]
....
}
您的obj是data.bpi或data [“ bpi”]
答案 3 :(得分:0)
我发现这里有很多人使用以下方法遍历您的Object
:
for (let i in data.bpi) {
// Your code
}
但不应该不使用此方法,因为它还会迭代对象的所有可枚举属性。
因此,这里有更好的使用方法:
let keys = Object.keys(data.bpi)
for (let i = 0; i < keys.length; i++) {
let item = data.bpi[i]
}
或
let keys = Object.keys(data.bpi)
keys.forEach(e => {
let item = data.bpi[e]
})
或者您可以使用for...of
:
for (let i of data.bpi) {
let item = i
}