在python程序中将JSON作为参数发送时转义双qoutes

在python程序中将JSON作为参数发送时转义双qoutes,python,json,Python,Json,我知道有很多类似的问题,但我没有找到我的问题的答案。 我的问题是我不能正确地避开双引号。 这是我的JSON字符串: "{"source":{"datatype":"panorama","project":"Test project","zoomlevel":19,"imageids": [14295321, 14295325, 14295332, 14295303, 14295301]}}" 如果我手动修改JSON字符串,如下所示: "{\"source\":{\"datatype\":\"p

我知道有很多类似的问题,但我没有找到我的问题的答案。 我的问题是我不能正确地避开双引号。 这是我的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)
我尽了我所能,但没有成功。
有人能帮我一下吗?

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

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

如果您按原样传递json,您将

{arg:value}
现在,如果它是一个平面字典,那么您可以通过编写一个自定义函数将这个字符串操作为{“arg”:“value”},但是随着JSON变得复杂,这不是一个可行的方法,因为可能会出现边缘情况


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

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

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

如果您按原样传递json,您将

{arg:value}
现在,如果它是一个平面字典,那么您可以通过编写一个自定义函数将这个字符串操作为{“arg”:“value”},但是随着JSON变得复杂,这不是一个可行的方法,因为可能会出现边缘情况


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

使用单引号引用整个字符串,不要转义双引号。单引号没有帮助。@Abelisto感谢您的帮助。我已经在linux Ubuntu上测试了单引号,而且确实有效。但有趣的是,我认为同样的代码在我的windows计算机上失败,错误为
json.decoder.jsondecodecorr:期望值:第1行第1列(char 0)
使用单引号引用整个字符串,并且根本不转义双引号。单引号没有帮助。@Abelisto感谢您的帮助。我已经在linux Ubuntu上测试了单引号,而且确实有效。但有趣的是,我认为同样的代码在我的windows计算机上失败,错误为
json.decoder.jsondecodecorr:期望值:第1行第1列(char 0)
谢谢您的回答。单引号没有帮助。这给了我一个错误。不过,从文件中传递字符串的工作方式和预期的一样。谢谢您的回答。单引号没有帮助。这给了我一个错误。但是,从文件中传递字符串的工作方式与预期相同。