【发布时间】:2015-09-26 14:23:24
【问题描述】:
我正在尝试从 powershell 中的对象创建 JSON 文件,我可以很好地保存它,但是当我尝试从 python 脚本加载它时,我总是收到错误:ValueError: Expecting value: line 1 column 1 (字符 0)
这是 powershell 单行代码:
$devices = Get-WmiObject Win32_PNPEntity | where {$_.ConfigManagerErrorcode -ne 0} | Select Name, CompatibleID | ConvertTo-Json | Out-File file.json
我相信这是因为 powershell 保存它的方式,它看起来像这样:
[
{
"Name": "PCI Data Acquisition and Signal Processing Controller",
"CompatibleID": [
"PCI\\VEN_8086\u0026DEV_A161\u0026REV_31",
"PCI\\VEN_8086\u0026DEV_A161",
"PCI\\VEN_8086\u0026CC_118000",
"PCI\\VEN_8086\u0026CC_1180",
"PCI\\VEN_8086",
"PCI\\CC_118000",
"PCI\\CC_1180"
]
},
{
"Name": null,
"CompatibleID": [
"*PNP0CA0"
]
},
{
"Name": "PCI Data Acquisition and Signal Processing Controller",
"CompatibleID": [
"PCI\\VEN_8086\u0026DEV_A127\u0026REV_31",
"PCI\\VEN_8086\u0026DEV_A127",
"PCI\\VEN_8086\u0026CC_118000",
"PCI\\VEN_8086\u0026CC_1180",
"PCI\\VEN_8086",
"PCI\\CC_118000",
"PCI\\CC_1180"
]
},
{
"Name": "Base System Device",
"CompatibleID": [
"PCI\\VEN_8086\u0026DEV_1911\u0026REV_00",
"PCI\\VEN_8086\u0026DEV_1911",
"PCI\\VEN_8086\u0026CC_088000",
"PCI\\VEN_8086\u0026CC_0880",
"PCI\\VEN_8086",
"PCI\\CC_088000",
"PCI\\CC_0880"
]
},
{
"Name": "PCI Device",
"CompatibleID": [
"PCI\\VEN_8086\u0026DEV_A135\u0026REV_31",
"PCI\\VEN_8086\u0026DEV_A135",
"PCI\\VEN_8086\u0026CC_000000",
"PCI\\VEN_8086\u0026CC_0000",
"PCI\\VEN_8086",
"PCI\\CC_000000",
"PCI\\CC_0000"
]
}
]
这是python脚本:
import json
with open(r"C:\Users\azeleznx\PycharmProjects\Intel-Python-project\IT_Spider\scripts\file.json", 'r') as file:
read = json.load(file)
print(read)
和错误:
Traceback (most recent call last):
File "C:/Users/Alex/PycharmProjects/Intel-Python-project/test21.py", line 3, in <module>
read = json.load(file)
File "C:\Python34\lib\json\__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Python34\lib\json\__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "C:\Python34\lib\json\decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python34\lib\json\decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
现在我知道 JSON 对象应该以大括号开头和结尾,但我似乎无法让 powershell 以正确的方式保存它。
编辑
感谢 Robᵩ 为我提供答案,这是完整的脚本,用尽可能少的几行代码
import subprocess
import json
command = "Write-Host (Get-WmiObject Win32_PNPEntity | where {$_.ConfigManagerErrorcode -ne 0} " \
"| Select Name, CompatibleID | ConvertTo-Json)"
out = json.loads(subprocess.check_output(["powershell.exe", '-ExecutionPolicy', 'Unrestricted', command]).decode("utf-8"))
print(out)
【问题讨论】:
-
你用什么来加载json?我尝试加载上面的,它对我有用
-
尝试只保存一个对象,而不是整个集合。假设您使用
$object.ToJSON(),而不是使用$object[0].toJSON()。 -
感谢 Alex,包含给您带来麻烦的 JSON 文本。还请包括演示您所看到的错误的最小的完整 Python 程序。有关完整示例的更多信息,请参阅stackoverflow.com/help/mcve。
-
"现在我知道 JSON 对象应该以大括号开头和结尾" - 根据RFC7158,这不是真的。
-
已编辑的帖子包含更多信息。
标签: python json powershell