我正在构建一个通用的按组JQ脚本(详细说明in another question),该脚本接受要分组的字段作为命令行参数。
按顶级字段分组时效果很好;当我需要按对象层次结构中的一个字段分组时,它不是这样:
jq_group_on_test.json:
{
"a": {
"b": {
"c": "EFG"
}
},
"d": "HIJ"
}
顶级字段:
jq -s --arg group_by_field "d" '
group_by(.[$group_by_field])
| .[]
| [ (.[0][$group_by_field] ) ]' \
jq_group_on_test.json
[
"HIJ"
]
嵌套对象的字段:
jq -s --arg group_by_field "a.b.c" '
group_by(.[$group_by_field])
| .[]
| [ (.[0][$group_by_field] ) ]' \
jq_group_on_test.json
[
null
]
如果不使用任何变量,则相同的过滤器将起作用:
jq -s '
group_by(.a.b.c)
| .[]
| [ (.[0].a.b.c ) ]' \
jq_group_on_test.json
[
"DEF"
]
答案 0 :(得分:1)
要将路径作为参数传递,必须使用数组路径符号(即,字符串和/或整数的数组):
jq -s --argjson group_by_field '["a","b","c"]' '
group_by( getpath($group_by_field) )
| .[]
| [ .[0] | getpath($group_by_field) ]
' jq_group_on_test.json
请注意使用命令行选项--argjson
。