MessagePack格式化数据上的Axios GET

时间:2019-02-22 16:33:04

标签: javascript json axios msgpack

我正在尝试使用Axios从后端获取一些数据。数据通常以MessagePack形式返回,但是Axios会将数据自动解析为我认为的JSON。但是,响应数据似乎在每个条目的前面都有一个“%”符号,并且键值并非都被引号引起来。正确的JSON格式甚至要求密钥必须用引号引起来以表明它是字符串。拨打电话后,我无法更改后端或获得的数据格式。我正在尝试访问其中的数据,但它返回的是未定义的。尝试解析JSON字符串也无济于事。它停在第一个字符“%”,并显示“意外令牌”。

const res = await new Promise(resolve => https.get(arr[i].link, resolve)); if (res.statusCode === 404) { //... } //...

2 个答案:

答案 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。