我读过有关使用 python 将 JSON 文本作为命令行参数传递的类似问题,但没有一个解决方案适用于我的情况。
我正在自动化一个 python 脚本,并且自动化运行一个 powershell 脚本,该脚本采用从电源自动化流程生成的 JSON 对象。一切都很顺利,直到在我的 python 脚本中处理 JSON 为止。
我的目标是将 JSON 转换为字典,以便我可以在代码中使用键值对。
我的 powershell 脚本如下所示:
Python script.py {"Items":[{"Name":"foo","File":"\\\\files\\foo\\foo.csv"},{"Name":"bar","File":"\\\\files\\bar\\bar.csv"},{"Name":"baz","File":"\\\\files\\baz\\baz.csv"}]}
我的 JSON 如下所示:
{
"Items": [
{
"Name": "foo",
"File": "\\\\files\\foo\\foo.csv"
},
{
"Name": "bar",
"File": "\\\\files\\bar\\bar.csv"
},
{
"Name": "baz",
"File": "\\\\files\\baz\\baz.csv"
}
]
}
我尝试了这个解决方案:
if len(sys.argv) > 1:
d = json.loads(sys.argv[1])
print(d)
但它返回此错误:
Unexpected token ':' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
我不确定如何解决这个问题,任何建议都会有帮助!
您的代码在 PowerShell 端看起来不错,只是在 Json 字符串周围缺少单引号:
Python script.py '{"Items":[{"Name":"foo","File":"\\\\files\\foo\\foo.csv"},{"Name":"bar","File":"\\\\files\\bar\\bar.csv"},{"Name":"baz","File":"\\\\files\\baz\\baz.csv"}]}'
然后假设你的 Python 代码是:
import json
import sys
if len(sys.argv) > 1:
d = json.loads(sys.argv[1])
for i in d['Items']:
print(i)
那么 PowerShell 控制台中的输出将是:
{'Name': 'foo', 'File': '\\\\files\\foo\\foo.csv'}
{'Name': 'bar', 'File': '\\\\files\\bar\\bar.csv'}
{'Name': 'baz', 'File': '\\\\files\\baz\\baz.csv'}