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/检查)。谢谢。
所以我想通了。
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)
我会尝试找到更好的方法,但今天,我已经完成了。
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'}"