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

Ris*_*i_B 4 python powershell json

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

{"platform": "android", "version": "6.0.1"}
Run Code Online (Sandbox Code Playgroud)

我的代码如下。

import sys
import json
data = json.loads(sys.argv[1])
print(str(data))
Run Code Online (Sandbox Code Playgroud)

在 Windows 10 PowerShell 上运行以下命令时,

python jsonTest.py '{"platform": "android", "version": "6.0.1"}'
Run Code Online (Sandbox Code Playgroud)

我得到以下信息:

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)
Run Code Online (Sandbox Code Playgroud)

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

Ris*_*i_B 5

所以我想通了。

sys.argv[1]
Run Code Online (Sandbox Code Playgroud)

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

{"platform": "android", "version": "6.0.1"}
Run Code Online (Sandbox Code Playgroud)

进入

{platform: android, version: 6.0.1}
Run Code Online (Sandbox Code Playgroud)

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

Python jsonTest.py '{\"platform\": \"android\", \"version\": \"6.0.1\"}'
Run Code Online (Sandbox Code Playgroud)

我会尝试找到更好的方法,但今天,我已经完成了。


jac*_*law 1

import sys
import json
data = json.loads(sys.argv[1].replace("'", '"'))
print(str(data))
Run Code Online (Sandbox Code Playgroud)

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