我有一个具有以下格式的JSON文件:
[System.Collections.ObjectModel.Collection[psobject]]
从这里开始,我想要实现的是合并/连接字段,这样我就可以得到如下输出:
[
{
"A": "A1",
"B": [
{
"B_array": [
{
"B_field1": "B1",
"B_field2": "B2"
}
],
"C": 10,
"E": "E1"
},
{
"B_array": [
{
"B_field1": "B3",
"B_field2": "B4"
}
],
"C": 20,
"E": "E2"
}
],
"F": "F1"
}
]
到目前为止,我所做的是:
["A1" "B1, B2" 10 "E1" "F1"]
["A1" "B3, B4" 20 "E2" "F1"]
但是我得到的是每种可能的组合,例如:
map(.A + (.B[].C|tostring)+.B[].E+(.B[].B_array[] | join(" | ")+.F))
如何使用正确的jq查询获得上面期望的结果?
谢谢。
答案 0 :(得分:1)
您要在处理每个B
元素时将每个对象保存在顶级列表中,以备后用。
$ jq -c '.[] as $top | .[].B[] | [$top.A, (.B_array[] | join(", ")), .C, .E, $top.F]' tmp.json
["A1","B1, B2",10,"E1","F1"]
["A1","B3, B4",20,"E2","F1"]
变量赋值可以看作是一个过滤器,该过滤器将其输入不变地传递,但是为给定表达式提供了名称。也就是说,$top
是.[]
,除了.
是指分配过滤器的输入,而不是当前输入。