Я пытаюсь использовать 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"
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В 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 называется расслабленным-json. Я отредактирую свой ответ и вставлю ссылку.
Привет! Знаки % заменены, но проблема остается в том, что ключи ответа по-прежнему не заключены в кавычки. Когда для него вызывается JSON.parse, я все еще получаю неожиданный токен для данных, которые он пытается проанализировать.