如何使用 jq 打印嵌套值和父级值
How to print nested values along with parent level values using jq
我有以下json
{
"data": [
{
"id": id1,
"arr": [
{
"arrId": arrId11,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
},
{
"arrId": arrId12,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
}
],
"otherParentLevelKey": yyyyy
},
{
"id": id2,
"arr": [
{
"arrId": arrId21,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
},
{
"arrId": arrId22,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
}
],
"otherParentLevelKey": yyyyy
}
]
}
我想要以下输出
{
"id": id1,
"arr": [
{
"arrId": arrId11
},
{
"arrId": arrId11
}
]
}
{
"id": id2,
"arr": [
{
"arrId": arrId21
},
{
"arrId": arrId21
}
],
}
我尝试了以下查询,但它在语法上不正确
jsonArray | jq '.data[] | {id, arr[].arrId}'
我现在使用的方法类似于下面的方法。输出是我可以管理的,但我想知道是否有一种方法可以使用 jq 来实现我上面想要的。
jsonArray | jq '.data[] | [{(.id): .arr[].arrId}]'
使用 map
保留数组,同时根据您的需要修改(此处:减少)数组:
jq '.data[] | {id, arr: .arr | map({arrId})}'
{
"id": "id1",
"arr": [
{
"arrId": "arrId11"
},
{
"arrId": "arrId12"
}
]
}
{
"id": "id2",
"arr": [
{
"arrId": "arrId21"
},
{
"arrId": "arrId22"
}
]
}
我有以下json
{
"data": [
{
"id": id1,
"arr": [
{
"arrId": arrId11,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
},
{
"arrId": arrId12,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
}
],
"otherParentLevelKey": yyyyy
},
{
"id": id2,
"arr": [
{
"arrId": arrId21,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
},
{
"arrId": arrId22,
"someOtherKey1": xxx,
"someOtherKey2": xxx,
}
],
"otherParentLevelKey": yyyyy
}
]
}
我想要以下输出
{
"id": id1,
"arr": [
{
"arrId": arrId11
},
{
"arrId": arrId11
}
]
}
{
"id": id2,
"arr": [
{
"arrId": arrId21
},
{
"arrId": arrId21
}
],
}
我尝试了以下查询,但它在语法上不正确
jsonArray | jq '.data[] | {id, arr[].arrId}'
我现在使用的方法类似于下面的方法。输出是我可以管理的,但我想知道是否有一种方法可以使用 jq 来实现我上面想要的。
jsonArray | jq '.data[] | [{(.id): .arr[].arrId}]'
使用 map
保留数组,同时根据您的需要修改(此处:减少)数组:
jq '.data[] | {id, arr: .arr | map({arrId})}'
{
"id": "id1",
"arr": [
{
"arrId": "arrId11"
},
{
"arrId": "arrId12"
}
]
}
{
"id": "id2",
"arr": [
{
"arrId": "arrId21"
},
{
"arrId": "arrId22"
}
]
}