我想使用python解析批处理脚本中的JSON,例如:
HOSTNAME=$(curl -s ${HOST} | python ?)
Run Code Online (Sandbox Code Playgroud)
curl的JSON输出如下所示:
'{"hostname":"test","domainname":"example.com"}'
Run Code Online (Sandbox Code Playgroud)
如何使用单行python命令执行此操作?
小智 10
echo '{"hostname":"test","domainname":"example.com"}' | python -m json.tool
Run Code Online (Sandbox Code Playgroud)
基于以下从curl命令返回的JSON ...
'{"hostname":"test","domainname":"example.com"}'
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用python通过json json模块提取主机名:
HOSTNAME=$(curl -s ${HOST} | python -c \
'import json,sys;print json.load(sys.stdin)["hostname"]')
Run Code Online (Sandbox Code Playgroud)
请注意,我已经使用a拆分了该行,\以使其在stackoverflow上更具可读性。我还根据chepner的注释简化了该命令。
原始资料:使用Unix工具解析JSON
另请参阅:https : //wiki.python.org/moin/Powerful%20Python%20One-Liners
由于 Python 是多平台的,因此注意 Linux 和 Windows 之间的差异非常重要,特别是因为它们处理双引号/单引号的方式不同。
其次,之前的一些答案有点过时:在 python2 中,print允许不带括号。然而,在 python3 中,print 必须位于括号之间。
如何放置双/单引号并不重要。Json可以用“keys”或“keys”两种方式解析
HOSTNAME=$(curl -s "$HOST" |
python3 -c 'import json,sys;print(json.load(sys.stdin)["hostname"])')
Run Code Online (Sandbox Code Playgroud)
它也有效:(注意键处的单/双引号)
HOSTNAME=$(curl -s "$HOST" |
python3 -c "import json,sys;print(json.load(sys.stdin)['hostname'])")
Run Code Online (Sandbox Code Playgroud)
json 中的键必须位于单引号之间。仅接受以下语法。
该ConvertTo-Json函数生成对象并使用单引号之间的键。
$HOSTNAME=(Invoke-RestMethod $HOST | `
ConvertTo-Json | `
python3 -c "import json,sys; print(json.load(sys.stdin)['hostname'])")
Run Code Online (Sandbox Code Playgroud)