簡體   English   中英

如何使用單行 python 命令解析 json?

[英]how can I parse json with a single line python command?

我想在批處理腳本中使用 python 來解析 JSON,例如:

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

curl 的 JSON 輸出如下所示:

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

如何使用單行 python 命令執行此操作?

基於從 curl 命令返回的以下 JSON ...

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

然后,您可以使用 python 使用 python json 模塊提取主機名:

HOSTNAME=$(curl -s "$HOST" |
  python -c \
    'import json,sys;print(json.load(sys.stdin)["hostname"])')

請注意,我使用\拆分了行,以使其在 stackoverflow 上更具可讀性。 我還根據chepner 的評論簡化了命令。

原始來源: 使用 Unix 工具解析 JSON

另見: https ://wiki.python.org/moin/Powerful%20Python%20One-Liners

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

由於 Python 是多平台的,因此需要注意 Linux 和 Windows 之間的差異,尤其是因為它們對待雙引號/單引號的方式不同。

其次,以前的一些答案有點過時了:在 python2 中,允許不帶括號的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'])")

窗口(PowerShell)

json 中的鍵必須在單引號之間。 僅接受以下語法。
ConvertTo-Json函數生成對象並使用單引號之間的鍵。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM