我正在尝试使用Axios从后端获取一些数据。数据通常以MessagePack形式返回,但是Axios会将数据自动解析为我认为的JSON。但是,响应数据似乎在每个条目的前面都有一个“%”符号,并且键值并非都被引号引起来。正确的JSON格式甚至要求密钥必须用引号引起来以表明它是字符串。拨打电话后,我无法更改后端或获得的数据格式。我正在尝试访问其中的数据,但它返回的是未定义的。尝试解析JSON字符串也无济于事。它停在第一个字符“%”,并显示“意外令牌”。
const res = await new Promise(resolve => https.get(arr[i].link, resolve));
if (res.statusCode === 404) {
//...
}
//...
答案 0 :(得分:0)
在Axios中,您可以将响应类型指定为arraybuffer,blob,document,json,text,stream。文字应该可以解决问题。文档为here
responseType: 'text',
答案 1 :(得分:0)
您可以使用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。 有一些discussions关于解析这种json。