用于 JSON 的 XMLstarlet?

用于 JSON 的 XMLstarlet?

有没有类似的工具XML小星但适用于 JSON 而不是 XML?

我的用例:从分层 JSON 文档中提取某些值,因为它们是由某些 REST API 返回的。

能够通过类似 XPath 的表达式选择节点之类的东西会很有帮助。

答案1

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"

还有对象路径,一种不同的 JSON 查询语言 - 尽管 jq 似乎更广泛可用(例如,它打包在 Fedora 23 上)。

在程序中重用此类查询片段是很容易的,例如 jq 有多个绑定(例如对于Python)并且 ObjectPath 也可以作为 Python 模块使用。

相关内容