将json文本作为命令行参数传递

时间:2017-07-12 23:42:48

标签: python json powershell

我正在尝试将以下JSON文本传递给我的python代码。

{"platform": "android", "version": "6.0.1"}

我的代码如下。

import sys
import json
data = json.loads(sys.argv[1])
print(str(data))

在Windows 10 PowerShell上运行以下内容时,

python jsonTest.py '{"platform": "android", "version": "6.0.1"}'

我得到以下内容:

Traceback (most recent call last):
File "jsonTest.py", line 3, in <module>
data = json.loads(sys.argv[1])
File "C:\Users\Rishabh Bhatnagar\AppData\Local\Programs\Python\Python36-
32\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Users\Rishabh Bhatnagar\AppData\Local\Programs\Python\Python36-
32\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\Rishabh Bhatnagar\AppData\Local\Programs\Python\Python36-
32\lib\json\decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double 
quotes: line 1 column 2 (char 1)

据我所知,我接受了我的代码,并正确传递了JSON文本。我无法弄清楚我做错了什么。我知道JSON文本是有效的(使用https://jsonlint.com/检查)。感谢。

2 个答案:

答案 0 :(得分:2)

所以我明白了。

sys.argv[1]

以上一行是在我的Json文本下面,并从中取出引号。

{"platform": "android", "version": "6.0.1"}

{platform: android, version: 6.0.1}

我的解决方法是按如下方式运行它。

Python jsonTest.py '{\"platform\": \"android\", \"version\": \"6.0.1\"}'

我会尽力找到更好的方法,但就今天而言,我已经完成了。

答案 1 :(得分:0)

import sys
import json
data = json.loads(sys.argv[1].replace("'", '"'))
print(str(data))

这似乎对我有用,python 3.6在使用python jsonTest.py "{'platform': 'android', 'version': '6.0.1'}"

进行调用时