需要帮助才能使用jq或jsawk或shell脚本解析和打印category
值。
{
"fine_grained": {
"dog": [
{
"category": "cocker spaniel",
"mark": 0.9958831668
}
]
},
"coarse": [
{
"category": "dog",
"mark": 0.948208034
}
]
}
答案 0 :(得分:1)
假设所有category
值都是简单字符串,并且您想要所有类别值,无论它在JSON中的哪个位置,您都可以使用jq来使用此过滤器:
.. | objects.category // empty
返回以下字符串:
"cocker spaniel"
"dog"
答案 1 :(得分:0)
这是一个解决方案,它使用 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
所以上面的内容实际上就是
(leaf_paths | select(.[-1] == "category")) as $p
| getpath($p)