Доступ к JSON данным после Ax ios получения запроса - PullRequest
1 голос
/ 08 марта 2020

Я пытался создать Discord Bot, который бы работал с Shoppy API (https://shoppy.dev/). Я совершенно новичок в Javascript - но не новичок в кодировании!

Я провел некоторое исследование по Ax ios и сумел использовать его для получения списка заказов со счета Shoppy. Проблема в том, что есть тонна этих данных, и я хочу показать их только пользователю. Мне пришлось отредактировать некоторую информацию в коде ниже, но это то, что у меня есть:

        case 'orders':
            async function makeRequest() {
                const config = {
                    method: 'get',
                    url: 'https://shoppy.gg/api/v1/orders/',
                    headers: {
                        'Authorization': 'REDACTED - MY API KEY',
                        'Content-Type': 'application/json',
                        'Connection': 'keep-alive'
                    }
                }
                axios(config)
                    .then(response => {
                        console.log(response.data);
                    });
            }

            makeRequest();
            break;

Это приводит к выводу ниже в консоли. Я только перечислил некоторую информацию здесь, чтобы показать формат, но у вас есть общее представление:

Bot Online
[
  {
    id: 'REDACTED',
    pay_id: null,
    product_id: 'REDACTED',
    coupon_id: null,
    price: 3,
    currency: 'CAD',
    exchange_rate: null,
    email: 'REDACTED',
    delivered: 1,
    confirmations: 1,
    required_confirmations: 1,

Моя проблема - я не могу понять, как взять только данные из ' например, по электронной почте и показать его пользователю. Я часами пробовал разные способы, но консоль всегда показывает «undefined».

Я чувствую, что это очень простая вещь, и я просто ничего не понимаю. У кого-нибудь есть совет? Чтобы дать немного больше контекста для этого фрагмента кода, пользователь пишет «! Order», и бот ответит списком своих заказов - но я только хочу, чтобы бот отображал что-то вроде «Order ID», «Product Name». , 'Электронное письмо'. Поэтому мне не нужны все данные, которые извлекаются.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Запрос возвращает массив. Поэтому вам нужно перебрать его, чтобы получить все элементы. Вы можете использовать для l oop или функцию map для этого в ответном обратном вызове.

axios(config).then(response => {
   console.log(response.data);
   //Add the for loop or the map operator here
})

Чтобы использовать для l oop:

for(let x of response.data){
   //x gives you an individual item. Do whatever you want with it.
   // x.email gives you the email
}

Использовать оператор карты:

var emails = response.data.map(x => {
    return x.email;
});
//emails contains the array of all emails

Вы можете добавить свою собственную проверку в for l oop или оператору карты, чтобы выбрать соответствующие электронные письма ...

0 голосов
/ 08 марта 2020

Вы можете использовать метод .map:

let response = {
  data: [{
    id: 'REDACTED',
    pay_id: null,
    product_id: 'REDACTED',
    coupon_id: null,
    price: 3,
    currency: 'CAD',
    exchange_rate: null,
    email: 'REDACTED',
    delivered: 1,
    confirmations: 1,
    required_confirmations: 1,
  }, {
    id: 'REDACTED2',
    pay_id: null,
    product_id: 'REDACTED2',
    coupon_id: null,
    price: 3,
    currency: 'CAD',
    exchange_rate: null,
    email: 'REDACTED2',
    delivered: 1,
    confirmations: 1,
    required_confirmations: 1,
  }]
}

console.log(response.data.map(item => {
  return {
    "Email": item.email,
    "Product ID": item.product_id,
    // Other fields similarly
  }
}))
...