Как преобразовать объект ES6 JSON в словарь? - PullRequest
0 голосов
/ 25 июня 2018

Я действительно новичок в изучении 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"], чтобы я мог перебирать все ключи и значения в словаре.

Однако, поскольку dataType для data ["bpi"] не определен, я не могу использовать здесь метод forEach ().

Так как мне подойти к этому без необходимости все жестко кодировать? (т.е. это работает, когда я делаю console.log (data ["bpi"] ["EUR"]))

Спасибо за вашу помощь

Ответы [ 4 ]

0 голосов
/ 25 июня 2018

Я вижу, что многие люди здесь используют следующий метод для перебора вашего 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
}
0 голосов
/ 25 июня 2018

Вы можете преобразовать объект json в массив, используя Object.keys и выполнить итерации по нему.

Пример

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

0 голосов
/ 25 июня 2018

Для перебора объектов вы можете сделать это следующим образом:

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

Ваш объект здесь будет data.bpi или data ["bpi"]

0 голосов
/ 25 июня 2018

Пара вещей здесь.

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 */ )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...