首页 > 解决方案 > 在 python 程序中发送 JSON 作为参数时转义双引号

问题描述

我知道有很多类似的问题,但我没有设法找到我的问题的答案。我遇到的问题是我无法正确转义双引号。这是我的 JSON 字符串:

"{"source":{"datatype":"panorama","project":"Test project","zoomlevel":19,"imageids": [14295321, 14295325, 14295332, 14295303, 14295301]}}"

如果我像这样手动修改 JSON 字符串:

"{\"source\":{\"datatype\":\"panorama\",\"project\":\"Test project\",\"zoomlevel\":19,\"imageids\": [14295321, 14295325, 14295332, 14295303, 14295301]}}"

并将其发送到我的 python 脚本:

import json
import sys

input_argv = str(sys.argv[1])
input_str = json.loads(input_argv)
image_ids = input_str['source']['imageids']
image_id = image_ids[0]
project_name = input_str['source']['project']

print(image_id, project_name)

它按预期工作。但是,如果我使用未修改的 JSON 字符串并将其发送到以下脚本:

import json
import sys

input_argv = str(sys.argv[1])
input_clean = input_argv.replace('"','\"')
input_str = json.loads(input_clean)
image_ids = input_str['source']['imageids']
image_id = image_ids[0]
project_name = input_str['source']['project']

print(image_id, project_name)

但这给了我以下错误:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

我已经尽我所能,但没有任何成功。有人可以帮我吗?

标签: pythonjson

解决方案


双引号在 shell 中有特殊的含义。您将需要使用转义的双引号或单引号传递输入而不转义双引号

python app.py '{"arg":"value"}'

或者

python app.py "{\"arg\":\"value\"}"

如果您按原样传递 json,您将类似于

{arg:value}

现在,如果它是一个平面字典,您可以继续通过编写自定义函数将此字符串操作为 {"arg":"value"},但随着 JSON 变得复杂,这不是一种可行的方法,因为可能存在边缘情况接下来

更好的实现是从文件中读取此 JSON 数据并将文件路径作为参数传递给您的脚本。


推荐阅读