Axios GET для данных в формате MessagePack - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь использовать Axios, чтобы получить некоторые данные из бэкэнда.Данные обычно возвращаются в форме MessagePack, но Axios автоматически разбирает данные на то, что я считаю JSON.Однако данные ответа, по-видимому, имеют знак «%» перед каждой записью, а значения ключа не все заключены в кавычки.Правильный формат JSON требует, чтобы даже ключ был в кавычках, чтобы показать, что это строка.Я не могу изменить бэкэнд или какую форму данных я получаю после совершения звонка.Я пытаюсь получить доступ к данным внутри, но он возвращает неопределенное.Попытка разобрать строку JSON также ни к чему не привела;он останавливается на первом символе "%" и говорит "Неожиданный токен".

%{ attendance: nil, away_team: %{ age_group: nil, id: 3222, main_color: [2, 1, 4], name: "Random Name", national: false, region: %{id: 11, name: "Country"}, sex: "male" }

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете использовать interceptors для форматирования возвращенных данных с сервера перед его использованием.Я предполагаю, что, как вы сказали, сервер возвращает данные с префиксом % в каждом новом открытом скобках:

const WEBSERVER_ENDPOINT = 'www.whatever.it/api'
let instance = axios.create({
    baseURL: WEBSERVER_ENDPOINT,
});

// response instanceof AxiosResponse
instance.interceptors.response.use(async function (response) {
    let dataLikeJson = response.data.replace(/%{/g, '{'); //  replace all '%{' with '{' 
    response.data = JSON.parse(dataLikeJson); //then parse it in JSON

    return response;
}, function (error) {
   // Do something with request error
   return Promise.reject(error);
});

// blabla the rest...
instance.post(...)

Вот документация https://github.com/axios/axios#interceptors

РЕДАКТИРОВАТЬ: Для чего яПонятно, что известный формат '{key: "value"}' называется relaxed-json.Есть дискуссий о разборе этого типа json.

0 голосов
/ 22 февраля 2019

В Axios вы можете указать тип ответа как массив буферов, BLOB-объектов, документов, JSON, текст, поток.Текст должен сделать свое дело.Документация здесь

responseType: 'text', 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...