Xml

用於 JSON 的 XMLstarlet?

  • January 9, 2016

是否有類似於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 模組。

引用自:https://unix.stackexchange.com/questions/254231