Axios GET在MessagePack格式化数据上

问题描述 投票:0回答:2

我正在尝试使用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 json axios msgpack
2个回答
0
投票

在Axios中,您可以将响应类型指定为arraybuffer,blob,document,json,text,stream。文字应该可以解决问题。文档是here

responseType: 'text', 

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。有一些关于解析这种json的discussions

© www.soinside.com 2019 - 2024. All rights reserved.