在 Axios 中禁用 JSON 解析

Posted

技术标签:

【中文标题】在 Axios 中禁用 JSON 解析【英文标题】:Disable JSON parsing in Axios 【发布时间】:2017-04-22 03:18:46 【问题描述】:

我有一个 react 应用程序,我希望用户能够在其中上传他可以查看的代码文件。

因此,自然也接受 .json 文件。现在要获取文件内容,我使用 axios 向服务器上的文件发出 get 请求。

这适用于除 JSON 文件之外的所有文件,这些文件会自动解析,因此不能作为字符串使用,而是作为 javascript 对象使用。用JSON.stringify 再次将它们变成一个字符串会删除所有换行符,所以我不能这样做。

有什么方法可以阻止 Axios 自动解析 JSON?

【问题讨论】:

您是否将responseType 设置为text(默认为json)? @VedranJukic 我已经尝试过了,但没有改变。我想这是因为服务器设置的内容类型,但我想在客户端解决这个问题,而不是改变我的 api 感谢@VedranJukic - 这对我来说是缺失的部分。 【参考方案1】:

LuleBes 的回答对我不起作用。起作用的是: transformResponse: (res) => return res; , 如:

    axios.get(url, 
        headers,
        transformResponse: (res) => 
            // Do your own parsing here if needed ie JSON.parse(res);
            return res;
        ,
        responseType: 'json'
    ).then(response => 
        // response.data is an unparsed string
    );

【讨论】:

response.data 是一个空对象有什么帮助?我想要文件内容,而不是空对象。我不明白你在这里做什么,看到你的转换函数获取数据并只返回一个空字符串。 ops,忘记在我的应用程序测试中更改它。现在答案应该反映了问题。 对我不起作用:我必须评论 //responseType: 'json',然后我会在 res 中获取文本,否则已经是 json。 这对我有用。简写为:transformResponse: res => res【参考方案2】:

好的,我想通了。您可以通过在配置中传递 transformResponse 数组来禁用响应处理,然后使用该数组代替默认值。在那里,您只需提供一个空数组或需要应用于响应的函数数组,如下所示:

axios.get(URL, transformResponse: [])
.then(response => /*response.data is plain text*/);

【讨论】:

以上是关于在 Axios 中禁用 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章

在Python Flask中,Axios POST没有被正确解析。

深入解析Axios 常用的请求方法别名

axios网络请求框架源码解析

Axios源码解析:拦截器

发生错误 400(错误请求)时,使用 Axios 从 POST 捕获返回 json

axios源码解析