jq:映射不同长度的字段数组
jq: map field array with different length
我正在与那些 JSON 合作:
{
"extension": [
{
"url": "url1",
"system": "system1"
},
{
"url": "url2",
"system": "system2"
}
]
}
{
"extension": [
{
"url": "url3",
"system": "system3"
}
]
}
如您所见,两个 JSON 对象都有不同的 .extension
长度。
我正在使用此命令来映射输入 JSONs:
jq --raw-output '[.extension[] | .url, .system] | @csv'
您可以找到 jqplay here.
我明白了:
"url1","system1","url2","system2"
"url3","system3"
我想得到的是:
"url1","system1","url2","system2"
"url3","system3",,
关于如何“正确”映射这些“字段”有什么想法吗?
使用 transpose | transpose
翻转 table 两次,用 null
:
填充未装配的方形中缺少的槽
jq -rs 'map(.extension) | transpose | transpose[] | map(.url, .system) | @csv'
"url1","system1","url2","system2"
"url3","system3",,
一个相当有效的解决方案:
def pad:
(map(length)|max) as $mx
| map( . + [range(length;$mx)|null] );
[inputs | [.extension[] | (.url, .system)]]
| pad[]
| @csv
这当然应该与 -n 命令行选项一起使用。
我正在与那些 JSON 合作:
{
"extension": [
{
"url": "url1",
"system": "system1"
},
{
"url": "url2",
"system": "system2"
}
]
}
{
"extension": [
{
"url": "url3",
"system": "system3"
}
]
}
如您所见,两个 JSON 对象都有不同的 .extension
长度。
我正在使用此命令来映射输入 JSONs:
jq --raw-output '[.extension[] | .url, .system] | @csv'
您可以找到 jqplay here.
我明白了:
"url1","system1","url2","system2"
"url3","system3"
我想得到的是:
"url1","system1","url2","system2"
"url3","system3",,
关于如何“正确”映射这些“字段”有什么想法吗?
使用 transpose | transpose
翻转 table 两次,用 null
:
jq -rs 'map(.extension) | transpose | transpose[] | map(.url, .system) | @csv'
"url1","system1","url2","system2"
"url3","system3",,
一个相当有效的解决方案:
def pad:
(map(length)|max) as $mx
| map( . + [range(length;$mx)|null] );
[inputs | [.extension[] | (.url, .system)]]
| pad[]
| @csv
这当然应该与 -n 命令行选项一起使用。