[英]Need help to parse and print only 'category' values either using jq or jsawk or shell script
需要帮助来解析和打印仅使用 jq 或 jsawk 或 shell 脚本的category
值。
{
"fine_grained": {
"dog": [
{
"category": "cocker spaniel",
"mark": 0.9958831668
}
]
},
"coarse": [
{
"category": "dog",
"mark": 0.948208034
}
]
}
假设所有category
值都是简单字符串并且您想要所有类别值,无论它在 JSON 中的哪个位置,您都可以使用 jq 使用此过滤器:
.. | objects.category // empty
这将返回以下字符串:
"cocker spaniel"
"dog"
这是一个使用leaf_paths并选择查找具有叶“类别”成员的所有路径的解决方案,然后使用foreach提取相应的值
foreach (leaf_paths | select(.[-1] == "category")) as $p (
.
; .
; getpath($p)
)
如果您的输入位于名为input.json
的文件中,而上述过滤器位于名为filter.jq
的文件中,则 shell 命令
jq -f filter.jq input.json
应该产生
"cocker spaniel"
"dog"
如果您不想在输出中使用引号,则可以使用-r
标志。
编辑:我现在意识到foreach E as $X (.; .; R)
形式的过滤器几乎总是可以重写为E as $X | R
E as $X | R
所以上面真的只是
(leaf_paths | select(.[-1] == "category")) as $p
| getpath($p)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.