【问题标题】:How can I stop Python's Requests library from stripping out escape characters?如何阻止 Python 的 Requests 库去除转义字符?
【发布时间】:2016-01-27 22:56:27
【问题描述】:

我收到一个如下所示的 JSON 块(为简洁而编辑):

... "actions": [{"script": \"{\"inputs\": [], <LOTS MORE JSON>}"}]"

本质上它是一个嵌套在另一个对象中的字符串。

当我使用 Chrome 中的 Advanced Rest Client 将此 JSON 发送到我的 Node.js API 时,它会成功。但是,当我使用此 Python 代码发送它时:

headers={'content-type': 'application/json'}
newrsp = self.session.post("http://my-api", data=str(my_json), headers=headers)

我收到了

SyntaxError: Unexpected token i

查看调用 JSON.parse 之前的正文,看来我的有效负载已被修改。而不是这样:

... "actions": [{"script": \"{\"inputs\": [], <LOTS MORE JSON>}"}]"''

看起来像这样:

... "actions": [{"script": "{"inputs": [], <LOTS MORE JSON>}"}]"

从其他程序调用我的 API 可以正常工作,并且不会删除转义字符,所以我很确定这不是我的代码,但 Requests API 在发送我的 JSON 之前以某种方式去除了字符。

我不是 Python 达人……任何 Python 人都知道发生了什么(希望我可以告诉请求不要这样做)?

【问题讨论】:

    标签: json node.js python-requests


    【解决方案1】:

    如果您使用参数“数据”,您应该自己转换 JSON:

    jsonItem = json.dumps(dict(item))
    req = requests.post('http://...', data=jsonItem)
    

    如果您使用参数“json”,则代表转换:

    req = requests.post('http://...', json=dict(item))
    

    【讨论】:

      【解决方案2】:

      我会回答我自己的问题,以防有人遇到类似问题...

      看起来 requests API 有一些自动转换例程,可以从不需要的元素中去除 JSON 转义字符。在组装整个长字符串之前,我最终在有问题的 JSON 片段上调用了 json.dumps(并在传递给请求时再次调用 json.dumps)。这有效地对其进行了“双重编码”,因此当请求去除转义字符时,它会按照我想要的方式保留它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-17
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        相关资源
        最近更新 更多