代码之家  ›  专栏  ›  技术社区  ›  John Doe

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

  •  1
  • John Doe  · 技术社区  · 6 年前

    我对学习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”],这样我就可以迭代字典中的所有键和值。

    但是,由于数据[“bpi”]的数据类型未定义,因此无法在此处使用foreach()方法。

    那么,我应该如何在不需要硬编码的情况下处理这些问题呢?(即,当我执行console.log(data[“bpi”][“eur”])时,它工作)

    谢谢你的帮助

    4 回复  |  直到 6 年前
        1
  •  2
  •   Kishan Mundha    6 年前

    可以使用 Object.keys

    例子

    Object.keys(data["bpi"]).map(key => data["bpi"][key]).forEach(item => console.log(item))

        2
  •  0
  •   pr0p    6 年前

    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]]
          ....
    }
    

        3
  •  0
  •   kyle    6 年前

    data["bpi"] data.bpi

    JSON.parse(data) 将JSON对象中的数据解析为一个JavaScript对象,然后您可以循环访问该对象。

    数据.bpi .forEach 因为这是一个数组方法。但是,您可以使用 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 */ )
    
        4
  •  0
  •   Arthur Guiot    6 年前

    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
    }