将 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 转换为 c# 时遇到问题