我想使用python在批处理脚本中解析JSON,例如:
HOSTNAME=$(curl -s "$HOST" | python ?)
字符串curl的JSON输出如下所示:
'{"hostname":"test","domainname":"example.com"}'
型我如何用一个python命令来实现这一点?
a6b3iqyw1#
基于下面从curl命令返回的JSON.
字符串然后,您可以使用python json模块使用python提取主机名:
HOSTNAME=$(curl -s "$HOST" | python -c \ 'import json,sys;print(json.load(sys.stdin)["hostname"])')
型注意,我使用\分割了这一行,以使其在stackoverflow上更具可读性。我还根据chepner's注解简化了命令。图像来源:Parsing JSON with Unix tools标签:https://wiki.python.org/moin/Powerful%20Python%20One-Liners
\
ghg1uchk2#
echo '{"hostname":"test","domainname":"example.com"}' | python -m json.tool
字符串
xdyibdwo3#
由于Python是多平台的,所以注意Linux和Windows之间的差异很重要,特别是因为它们处理双引号/单引号的方式不同。第二,之前的一些答案有点过时了:在python 2中,print不带括号是允许的。然而,在python3中,print必须在括号之间。
print
如何放置双引号/单引号并不重要。JSON可以通过“keys”或“keys”以两种方式解析
HOSTNAME=$(curl -s "$HOST" | python3 -c 'import json,sys;print(json.load(sys.stdin)["hostname"])')
字符串它也可以工作:(注意在单/双引号在关键)
HOSTNAME=$(curl -s "$HOST" | python3 -c "import json,sys;print(json.load(sys.stdin)['hostname'])")
型
json中的键必须在单引号之间。仅接受以下语法。ConvertTo-Json函数生成对象并使用单引号之间的键。
ConvertTo-Json
$HOSTNAME=(Invoke-RestMethod $HOST | ` ConvertTo-Json | ` python3 -c "import json,sys; print(json.load(sys.stdin)['hostname'])")
yfwxisqw4#
运行以下命令:
$ python -m json.tool
字符串它从标准输入中读取输入,并在一个很好的打印出来。所以你的问题:
HOSTNAME=$(curl -s "$HOST" | python -m json.tool )
4条答案
按热度按时间a6b3iqyw1#
基于下面从curl命令返回的JSON.
字符串
然后,您可以使用python json模块使用python提取主机名:
型
注意,我使用
\
分割了这一行,以使其在stackoverflow上更具可读性。我还根据chepner's注解简化了命令。图像来源:Parsing JSON with Unix tools
标签:https://wiki.python.org/moin/Powerful%20Python%20One-Liners
ghg1uchk2#
字符串
xdyibdwo3#
由于Python是多平台的,所以注意Linux和Windows之间的差异很重要,特别是因为它们处理双引号/单引号的方式不同。
第二,之前的一些答案有点过时了:在python 2中,
print
不带括号是允许的。然而,在python3中,print必须在括号之间。Linux(bash)
如何放置双引号/单引号并不重要。JSON可以通过“keys”或“keys”以两种方式解析
字符串
它也可以工作:(注意在单/双引号在关键)
型
Windows(powershell)
json中的键必须在单引号之间。仅接受以下语法。
ConvertTo-Json
函数生成对象并使用单引号之间的键。型
yfwxisqw4#
运行以下命令:
字符串
它从标准输入中读取输入,并在一个很好的打印出来。所以你的问题:
型