Axios GET для данных в формате MessagePack

Я пытаюсь использовать Axios для ПОЛУЧЕНИЯ некоторых данных из бэкэнда. Данные обычно возвращаются в форме MessagePack, но Axios автоматически преобразует данные в то, что я считаю JSON. Однако данные ответа, по-видимому, имеют знак «%» перед каждой записью, а значения ключей не все заключены в кавычки. Правильный формат JSON требует, чтобы даже ключ был в кавычках, чтобы обозначить, что это строка. Я не могу изменить серверную часть или форму данных, которые я получаю после звонка. Я пытаюсь получить доступ к данным внутри, но он возвращает значение undefined. Попытка проанализировать строку 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" }

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
532
2

Ответы 2

В Axios вы можете указать тип ответа как arraybuffer, blob, document, json, text, stream. Текст должен помочь. Документация: здесь

responseType: 'text', 

Вы можете использовать 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"}' называется расслабленным-json. Есть некоторые обсуждения о разборе этого вида json.

Привет! Знаки % заменены, но проблема остается в том, что ключи ответа по-прежнему не заключены в кавычки. Когда для него вызывается JSON.parse, я все еще получаю неожиданный токен для данных, которые он пытается проанализировать.

shaotime 25.02.2019 15:07

Привет, насколько я понял, плохо отформатированный json называется расслабленным-json. Я отредактирую свой ответ и вставлю ссылку.

jrumandal 28.02.2019 11:06

Другие вопросы по теме