Xml
用於 JSON 的 XMLstarlet?
是否有類似於XMLstarlet但適用於 JSON 而不是 XML 的工具?
我的案例:從分層 JSON 文件中提取某些值,因為它們是由某些 REST API 返回的。
能夠通過類似 XPath 的表達式選擇節點之類的東西在那裡會很有幫助。
jq 為從 JSON 文件中選擇元素提供了豐富的表達式語言。
因此,它類似於(採用 XPath 表達式)的
sel
命令。xmlstartlet
例如,要提取數字海洋上可用的 CentOS 7 核心版本列表 - 以記錄格式:
$ jq '[ .kernels[] | select(.name | test("^CentOS 7 x64")) | del(.name) | "\(.version) \(.id)"] | .[]' kernels.json
或者同樣簡化一點:
jq '.kernels[] | select(.name | test("^CentOS 7 x64")) | "\(.version) \(.id)" ' kernels.json
可以像這樣獲得json的地方:
$ curl -o kernels.json -X GET -H "Content-Type: application/json" \ -H "Authorization: Bearer $bearer" \ "https://api.digitalocean.com/v2/droplets/$droplet/kernels?page=1&per_page=1000"
還有ObjectPath,一種不同的 JSON 查詢語言 - 儘管 jq 似乎更廣泛可用(例如它被打包在 Fedora 23 上)。
在程序中重複使用這樣的查詢片段很容易,例如 jq 有多個綁定(例如Python)並且 ObjectPath 也可用作 Python 模組。