有没有类似的工具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 模块使用。