我正在尝试使用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"
}
在Axios中,您可以将响应类型指定为arraybuffer,blob,document,json,text,stream。文字应该可以解决问题。文档是here
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”}'称为relaxed-json。有一些关于解析这种json的discussions。