Ax ios данные ответа на JSON - PullRequest
0 голосов
/ 10 июля 2020

Я не знаком с JavaScript и Ax ios, поэтому любая помощь будет отличной :)

Мой запрос от Ax ios на URL-адрес имеет такой ответ.

data: '{"id":"test1", "cool":"test2"}'

При попытке JSON .parse вот так

const buildArray = (await axios(config)).data
let toJSON = JSON.parse(buildArray)

Это дает мне ошибку

Unexpected token  in JSON at position 0

Вот мой код и то, что я пытаюсь сделать. Для каждого ответа данных Ax ios я хочу добавить его в элемент массива и вернуть его.

async function buildList(items, token){
try {
    const list = []
    let config = ''

    for (item of items.items) {
        config = {
            method: 'get',
            url: 'https://my.domain.com/v1/customers/' + item.id,
            headers: {
                'Authorization': 'Bearer ' + token,
                'Accept': 'application/json'
            }
        }

        const buildArray = (await axios(config)).data
        list.push(JSON.parse(buildArray))
    }

    return list

} catch (err) {
    throw Error ('buildList error: ', err.message)
}
}

Ответы [ 4 ]

0 голосов
/ 11 июля 2020

Я наконец нашел обходной путь, но я не знаю, почему ответ Ax ios давал мне правильный ответ данных везде, куда я смотрел, но по какой-то причине возникла странная? (знак вопроса) в начале строки, я только понял, что после копирования вывода и вставки его на веб-сайт проверки JSON.

В основном из вывода Visual Studio он показывал правильно, что-то в этом роде.

data: '{"id":"test1", "cool":"test2"}'

Но по какой-то причине, когда я скопировал этот вывод из Visual Studio и вставил его на веб-сайт проверки JSON, он дал мне такой результат. Странно? (вопросительный знак)

data: '?{"id":"49f362ad

Итак, я попытался найти проверку JSON регулярного выражения после запуска множества различных регулярных выражений, одно из которых дало неопределенный результат вместо? (вопросительный знак), поэтому я попробовал это ниже и работал, но это странно, и я не человек-разработчик, чтобы обсуждать его дальше, я просто отправляю этот ответ, чтобы поделиться этим результатом :)

list.push(JSON.parse(buildArray.replace(/[^\\"]+/).replace('undefined', '{')))
0 голосов
/ 10 июля 2020

У меня есть пара вещей, которые вы можете попробовать.

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

  2. Попробуйте экранировать кавычки внутри начальных кавычек. Это будет выглядеть так:

    data: "{\"id\":\"test1\", \"cool\":\"test2\"}"

  3. Ax ios возвращает обещание. Попробуйте использовать его в формате Promise.then, а не ждать.

axios(config).then((response) => 
{ 
   JSON.parse(response); 
}).catch((err) => 
{
   console.log("Failed: " + err);
});

Сообщите мне, если ничего из этого не сработает. Удачи :)

0 голосов
/ 10 июля 2020

, пожалуйста, убедитесь, что вы получаете данные ответа правильно. и если вы возвращаете данные как объект на стороне сервера, вам не нужно выполнять синтаксический анализ с помощью JSON. JSON .parse используется для синтаксического анализа строки до JSON Пожалуйста, запустите это и проверьте:

const buildArray = (await axios(config)).data;
console.log(buildArray );
0 голосов
/ 10 июля 2020

Это нормально?

const response = await axios(config) // waiting to response
const { data } = response // make sure we can get data
let toJSON = JSON.parse(data)
...