jq:避免空数组映射字段
jq: avoid empty arrays mapped field
这是我的 jq 脚本:
def pick_nationality:
select(.NACIONALITAT) |
{nation: {country: .NACIONALITAT, code: "some code"} };
def pick_surname:
select(.SURNAME) |
{name: {surname: .SURNAME, code: "some code"} };
def pick_extension:
{ use: "official", extension: [pick_nationality, pick_surname] };
map(pick_extension)
输入json就像:
{
"SURNAME": "surname1"
}
{
"NACIONALITAT": "nacionalitat1"
}
但是,有时任何输入对象都不包含任何查找字段:
{
"field1": "value1"
}
{
"field2": "value2"
}
以上脚本returns:
[
{
"use": "official",
"extension": []
},
{
"use": "official",
"extension": []
}
]
我希望extension
不出现:
[
{
"use": "official"
},
{
"use": "official"
}
]
有什么想法吗?
扩展函数 pick_extension
以获得所需的输出:
def pick_extension:
[pick_nationality, pick_surname] as $extension
| { use: "official" }
| if $extension | length > 0 then . + {extension: $extension} else . end;
如果无法选择扩展名,空数组将不再以这种方式添加到 json 对象。
您只需添加
| del(..|select(. == []))
作为脚本的尾随,以便删除所有此类空数组
这是我的 jq 脚本:
def pick_nationality:
select(.NACIONALITAT) |
{nation: {country: .NACIONALITAT, code: "some code"} };
def pick_surname:
select(.SURNAME) |
{name: {surname: .SURNAME, code: "some code"} };
def pick_extension:
{ use: "official", extension: [pick_nationality, pick_surname] };
map(pick_extension)
输入json就像:
{
"SURNAME": "surname1"
}
{
"NACIONALITAT": "nacionalitat1"
}
但是,有时任何输入对象都不包含任何查找字段:
{
"field1": "value1"
}
{
"field2": "value2"
}
以上脚本returns:
[
{
"use": "official",
"extension": []
},
{
"use": "official",
"extension": []
}
]
我希望extension
不出现:
[
{
"use": "official"
},
{
"use": "official"
}
]
有什么想法吗?
扩展函数 pick_extension
以获得所需的输出:
def pick_extension:
[pick_nationality, pick_surname] as $extension
| { use: "official" }
| if $extension | length > 0 then . + {extension: $extension} else . end;
如果无法选择扩展名,空数组将不再以这种方式添加到 json 对象。
您只需添加
| del(..|select(. == []))
作为脚本的尾随,以便删除所有此类空数组