簡體   English   中英

如何將ES6 JSON對象轉換為字典?

[英]How to convert ES6 JSON object to dictionary?

如果我問一個已經重復的問題(沒有找到類似的問題),我真的很不熟悉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>
    );
  }
}

我想遍歷data [“ bpi”],以便遍歷字典中的所有鍵和值。

但是,由於data [“ bpi”]的dataType是未定義的,因此無法在此處使用forEach()方法。

那么,如何在不必對所有內容進行硬編碼的情況下進行處理呢? (即,當我執行console.log(data [“ bpi”] [“ EUR”])時,它可以工作)

謝謝你的幫助

您可以使用Object.keys將json對象轉換為數組,然后對其進行迭代。

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

這里有幾件事。

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 */ )

要遍歷對象,可以按以下步驟進行:

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”]

我看到這里有很多人使用以下方法遍歷您的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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM