Сохранение данных из конечной точки JSON - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь отобразить возвращенный json и сохранить идентификатор в профиле / профилях. Однако, похоже, что данные не отображаются правильно, id: ${ profile.id } этот бит нужно изменить? Буду признателен за любую оказанную помощь.

Является ли их онлайн-инструмент, который может помочь мне в этом?

Запрос API:

  // Grabs company data from the json url
  private getProfiles() {
    let config = {
      headers: {'Authorization':'Bearer AQVVEqNXTWVYPpPYivKNWVO8jsTx2eveV3kBg'}
    }
    axios
      .get("https://cors-anywhere.herokuapp.com/" + "https://api.linkedin.com/v2/me", config)
      .then(response => 
          response.data.map(profile => ({
            id: `${ profile.id }`
         }))
        )
        .then(profiles => {
          this.setState({
            profiles
          });
        })
      // We can still use the `.catch()` method since axios is promise-based
      .catch(error => this.setState({ error, isLoading: false }));
  }

Возвращены данные Json:

{
    "localizedLastName": "King",
    "id": "fm0B3D6y3I",
    "localizedFirstName": "Benn"
}

КогдаЯ консоль журнала регистрации.данных enter image description here

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Если из вашей конечной точки возвращаются только данные, которые вы опубликовали в формате JSON, то у вас нет массива для сопоставления.

У вас есть один объект.

У меня естьникогда раньше не использовал библиотеку axios, но при просмотре исходного кода response.data должен быть обработан JSON ответный текст из запроса XHR:

https://github.com/axios/axios/blob/4f189ec80ce01a0275d87d24463ef12b16715d9b/lib/adapters/xhr.js#L51-L53

https://github.com/axios/axios/blob/4f189ec80ce01a0275d87d24463ef12b16715d9b/lib/defaults.js#L61

И теперь я вижу, что вы опубликовали response.data, и это соответствует тому, что я ожидал.

Имея это в виду, я бы предложил обработать это так:

 // Grabs company data from the json url
  private getProfiles() {
    let config = {
      headers: {'Authorization':'Bearer AQVVEqNXTWVYPpPYivKNWVO8jsTx2eveV3kBg'}
    }
    axios
      .get("https://cors-anywhere.herokuapp.com/" + "https://api.linkedin.com/v2/me", config)
      .then(response => ({
            id: profile.id
         }))
        .then(profiles => {
          this.setState({
            profiles
          });
        })
      // We can still use the `.catch()` method since axios is promise-based
      .catch(error => this.setState({ error, isLoading: false }));
  }

То, что вы получаете обратно, хотя один профиль. Если вам нужно, чтобы profiles был массивом, вам нужно поместить ответ в массив.

0 голосов
/ 04 октября 2019

Я не понимаю, что вы пытаетесь сделать. На карте у вас есть функция обратного вызова, но, как я вижу, вы написали там объект. Если вы хотите переписать идентификатор текущего профиля, напишите это:

 response.data.map(profile => ({
    profile.id = `${ profile.id }`;
 }))

Но если вы хотите, чтобы он создал переменную, тогда это:

 response.data.map(profile => ({
   let id = `${ profile.id }`;
 }))
...