如何在Python的argparse与PowerShell中传递JSON字符串参数?
PowerShell中JSON参数解析失败的原因与解决方法
问题原因
PowerShell和CMD的命令行参数解析规则存在核心差异:
- CMD中,双引号包裹的内容需用
\"转义内部双引号,转义后的双引号会原样传递给Python,因此能正确解析JSON。 - PowerShell中,单引号虽为原样字符串标识符,但实际传递参数时,若直接使用
'{"key": "value"}'格式,部分场景下会导致内部双引号丢失(从报错信息可见,Python接收到的是无引号的{key: value, number: 42}),不符合JSON语法要求,触发解码错误;后续尝试将该字符串作为文件路径打开,自然也会失败。
解决方法
针对PowerShell环境,以下几种方式可可靠传递JSON参数:
方法1:双引号包裹+反引号转义内部双引号
PowerShell用反引号`作为转义字符,将整个JSON字符串用双引号包裹,内部每个双引号前添加反引号:
python script.py --json "{`"key`": `"value`", `"number`": 42}"
方法2:单引号包裹完整JSON字符串(适用于PowerShell 5.1及以上)
确保PowerShell版本在5.1或更高,直接用单引号包裹完整JSON字符串,PowerShell会原样保留内部双引号传递给Python:
python script.py --json '{"key": "value", "number": 42}'
方法3:传递JSON文件路径(适合复杂JSON)
若JSON内容较长或结构复杂,可将其写入文件(如data.json),直接传递文件路径避免转义麻烦:
python script.py --json ./data.json
方法4:使用Here-String传递复杂JSON
对于多行JSON,可借助PowerShell的Here-String特性定义字符串后传递:
$jsonContent = @" {"key": "value", "number": 42, "nested": {"foo": "bar"}} "@ python script.py --json $jsonContent
内容的提问来源于stack exchange,提问作者Freejack
相关产品推荐
相关产品推荐

