You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中将JSON转为x-www-form-urlencoded?编码不符报错

解决Python中JSON转x-www-form-urlencoded与Postman不一致的问题

先看你代码里的几个明显问题,这些正是导致编码结果不对、请求报错的核心原因:

你的代码存在的错误

  • json.dump('json code') 用法完全错误:json.dump()是用来将Python对象写入文件的,需要传入对象和文件句柄两个参数;如果要把Python对象转成JSON字符串,应该用json.dumps()。而且你这里传的是字符串'json code',这显然不是你实际要处理的目标数据。
  • urlencode(json.loads(j), encode='utf-8') 有两处问题:一是urlencode的编码参数是encoding而非encode;二是如果你已经有Python字典,完全不需要先转成JSON字符串再解析回字典——这属于多余操作,还可能引入不必要的编码异常。
  • 错误信息里的Unexpected token ' 说明编码后的内容出现了未转义的单引号,这大概率是你错误处理JSON字符串导致的格式混乱。

正确的处理方式

从Postman生成的qs参数(type=form&result_options=%7B%22fieldset%22%3A%5B%22count%22%5D%7D)能看出,Postman的逻辑是:把嵌套的JSON结构作为单个字段的字符串值,再对整个键值对字典进行url编码。

举个具体的实现例子,假设你的原始数据是这样的Python字典:

data = {
    "type": "form",
    "result_options": {
        "fieldset": ["count"]
    }
}

正确的转换步骤如下:

  1. 把嵌套的result_options值转成标准JSON字符串
  2. 用urlencode对整个键值对字典进行编码

代码实现:

import json
from urllib.parse import urlencode

# 原始数据(Python字典)
data = {
    "type": "form",
    "result_options": {
        "fieldset": ["count"]
    }
}

# 将嵌套结构转为JSON字符串
data["result_options"] = json.dumps(data["result_options"])

# 执行url编码
encoded_data = urlencode(data, encoding='utf-8')
print(encoded_data)

运行这段代码会输出:

type=form&result_options=%7B%22fieldset%22%3A%5B%22count%22%5D%7D

这和Postman生成的qs完全一致,用这个结果发送POST请求就不会再出现报错了。

补充:如果原始数据是JSON字符串

如果你的输入是JSON字符串而非Python字典,可以先解析成字典再按上面的步骤处理:

import json
from urllib.parse import urlencode

# 原始JSON字符串
json_str = '{"type": "form", "result_options": {"fieldset": ["count"]}}'
data = json.loads(json_str)

# 后续步骤和上面一致
data["result_options"] = json.dumps(data["result_options"])
encoded_data = urlencode(data, encoding='utf-8')

内容的提问来源于stack exchange,提问作者user3085459

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:54