将 json 转换为 x-www-form-urlencoded

Posted

技术标签:

【中文标题】将 json 转换为 x-www-form-urlencoded【英文标题】:Convert json to x-www-form-urlencoded 【发布时间】:2018-06-11 23:07:28 【问题描述】:

如何在 Python 中?

我正在使用下面的代码进行转换,但它与 Postman 编码的值不同,因此出现错误。

import json
from urllib.parse import urlencode

j = json.dump('json code')
encoded = urlencode(json.loads(j),encode='utf-8')

我在我的 POST 请求中收到以下错误。

"error": 
    "status": 500,
    "message": "Unexpected token '",
    "message_shortcode": "unexpected token '",
    "datetime": "20180102131407",
    "url": "http://127.0.0.1:3001/api/searches/0SH69023763",
    "qs": "type=form&result_options=%7B%22fieldset%22%3A%5B%22count%22%5D%7D",
    "type": "InternalServerError",
    "group": "server"

【问题讨论】:

您传递的查询字符串包含嵌入的 json,用单引号括起来:'type': ['form'], 'result_options': ['"fieldset":["count"]'] - 也许 API 不希望这里有 json? 【参考方案1】:

很明显,您的服务器 API 预期的数据没有以预期的格式传递,这会破坏服务器端代码的执行。 请尝试检查 API 的确切要求以及标头

如果它期望 Content-Type 标头为“x-www-form-urlencoded”,那么请确保在向 API URL 发出请求时也将其传递。

使用 requests 模块可以更轻松地实现您的代码,甚至无需使用 urllib 的 urlencode。所以最好你也看看这里:http://docs.python-requests.org/en/v0.10.7/user/quickstart/

【讨论】:

什么python编码器和邮递员的“x-www-form-encoded”一样工作? 您是否尝试过请求模块来执行您的 API url?您只需要直接在 requests.get() 或 requests.post() 方法的数据参数中传递字典,根本不需要 urlencoding,默认情况下使用 if 中的 'x-www-form-urlencoded' 格式您在 requests.get() 或 requests.post() 方法的数据参数中传递字典。例如对于您的数据:api_resp=requests.post(api_url, data=json.loads(j), timeout=5)。请在此处参考更多信息:docs.python-requests.org/en/v0.10.7/user/quickstart

以上是关于将 json 转换为 x-www-form-urlencoded的主要内容,如果未能解决你的问题,请参考以下文章

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV

如何将数据实体转换为 JSON 字符串

我使用 JSON 转换器将 JSON 转换为 c# 时遇到问题

将 node.js 缓冲区转换为字符串,然后转换为 JSON

将嵌套 JSON 转换为简单 JSON

将 JSON 数据转换为字典