如何用一行Python命令解析JSON?

nnvyjq4y  于 4个月前  发布在  Python
关注(0)|答案(4)|浏览(58)

我想使用python在批处理脚本中解析JSON,例如:

HOSTNAME=$(curl -s "$HOST" | python ?)

字符串
curl的JSON输出如下所示:

'{"hostname":"test","domainname":"example.com"}'


我如何用一个python命令来实现这一点?

a6b3iqyw

a6b3iqyw1#

基于下面从curl命令返回的JSON.

'{"hostname":"test","domainname":"example.com"}'

字符串
然后,您可以使用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

ghg1uchk

ghg1uchk2#

echo '{"hostname":"test","domainname":"example.com"}' | python -m json.tool

字符串

xdyibdwo

xdyibdwo3#

由于Python是多平台的,所以注意Linux和Windows之间的差异很重要,特别是因为它们处理双引号/单引号的方式不同。
第二,之前的一些答案有点过时了:在python 2中,print不带括号是允许的。然而,在python3中,print必须在括号之间。

Linux(bash)

如何放置双引号/单引号并不重要。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'])")

Windows(powershell)

json中的键必须在单引号之间。仅接受以下语法。
ConvertTo-Json函数生成对象并使用单引号之间的键。

$HOSTNAME=(Invoke-RestMethod $HOST | `
  ConvertTo-Json | `
  python3 -c "import json,sys; print(json.load(sys.stdin)['hostname'])")

yfwxisqw

yfwxisqw4#

运行以下命令:

$ python -m json.tool

字符串
它从标准输入中读取输入,并在一个很好的打印出来。所以你的问题:

HOSTNAME=$(curl -s "$HOST" | python -m json.tool )

相关问题