如何阻止Python的Requests库剥离转义字符?

时间:2016-01-27 22:56:27

标签: json node.js python-requests

我收到的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人都知道发生了什么(希望我可以告诉他们不要这样做的方式)?

2 个答案:

答案 0 :(得分:0)

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

看起来request API有一些自动转换例程,可以从不需要它的元素中剥离JSON转义字符。我最后在JSON上调用了json.dump,它在组装整个长字符串之前有问题(并在传递给请求时再次调用json.dumps)。这实际上是双重编码的&#39;它,所以当请求剥离转义字符时,它就像我想要的那样离开它。

答案 1 :(得分:0)

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

PiggyBank

如果使用参数“json”,则委派转换:

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