【问题标题】:API call fails because of additional escape character in json由于 json 中的附加转义字符,API 调用失败
【发布时间】:2018-01-18 23:31:09
【问题描述】:

我正在尝试对本地运行的服务进行 API 调用。该服务期望 post 具有这样的 json 数据:

{"tool" : "name", "version" : "1", "payload" : "{"branch" : "main"}"

所有这些都是变量都是字符串(工具、版本和有效负载)的类的成员,我用各自的字符串初始化它们:"name", "version" and "{\"branch\" : \"main\"}" 现在,当我使用 json.dumps(self.__dict__) 转储类变量时,我得到以下 json,我将其发送到我的 api 调用:

json_upload = {"tool" : "name", "version" : "1", "payload" : "{\\"branch\\" : \\"main\\"}"

我添加了一行json_upload.replace("\\\\", "\\"),但每次 API 调用失败并显示 415 并且我看到发送到 api 端点的数据都有双转义字符。这真的很令人沮丧,因为我不明白如何去除额外的"\\"。我该如何解决?我正在使用标准库 json 进行编码。

【问题讨论】:

  • 您是否尝试过json_upload = {"tool" : "name", "version" : "1", "payload" : '{"branch" : "main"}'payload 值使用单引号)?
  • 服务器期望的不是有效的 json。
  • @pault 我刚试过。结果相同。 API 用 415 拒绝它。如果我删除那个额外的转义字符并通过 curl 发送相同的数据,它会接受它。

标签: python json python-3.x python-2.7


【解决方案1】:

似乎数据被转义了两次。

现在,当我使用 json.dumps(self.dict) 转储类变量时,我得到以下 json,我将其发送到我的 api 调用:

您使用的是哪个客户端库?例如使用requests,您只需传递对象,它将被转换为 JSON:

r = requests.post('http://example.com/post', json={"key": "value"})

如果你给它一个字符串,它会转义字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 2016-10-14
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多