如何将ES6 JSON对象转换为字典?

时间:2018-06-25 02:01:29

标签: javascript jquery json ajax reactjs

我真的对学习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”])时有效)

感谢您的帮助

4 个答案:

答案 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]
       .....
    }
  • 在ES6中,添加了一个名为object.keys方法的新方法,该方法返回对象中的所有键

所以

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
}