【发布时间】:2021-02-04 16:49:19
【问题描述】:
我有一个json脚本,内容如下。
{
"syncToken": "1612442658",
"createDate": "2021-02-04-12-44-18",
"prefixes": [
{
"ip_prefix": "3.5.140.0/22",
"region": "ap-northeast-2",
"service": "AMAZON",
"network_border_group": "ap-northeast-2"
},
{
"ip_prefix": "35.180.0.0/16",
"region": "eu-west-3",
"service": "AMAZON",
"network_border_group": "eu-west-3"
},
{
"ip_prefix": "52.93.178.234/32",
"region": "us-west-1",
"service": "AMAZON",
"network_border_group": "us-west-1"
}
]
}
我的要求是将此 json 转换为以下格式的 csv。
ip_prefix region service
3.5.140.0/22 ap-northeast-2 AMAZON
35.180.0.0/16 eu-west-3 AMAZON
52.93.178.234/32 us-west-1 AMAZON
使用 jq 使用以下命令转换数据
jq -r '(.prefixes[0] | keys_unsorted), (.prefixes[] | to_entries | map(.value))|@tsv' ip-ranges.json
但它会导出所有密钥。在导出多个键中的几个键时需要帮助。
【问题讨论】:
-
请指定如何指定所需的键 - 显式(作为白名单)还是隐式(通过黑名单)?在jq程序中,还是作为调用jq时的参数,还是其他方式?
-
我希望在执行 jq 命令时将密钥作为参数传递。类似下面的 jq -r "desired keys" "key values" @tsv。 file.json 在上述情况下,我希望在 json 文件转换为 csv 时排除键“network_border_group”。
-
终于找到了解决上述问题的办法。我使用以下命令摆脱了我不想要的密钥。 jq 'del(.prefixes[].network_border_group)' | jq -r '(.prefixes[0] | keys_unsorted), (.prefixes[] | to_entries | map(.value))|@tsv' 非常感谢我可以使用的任何其他解决方案。
标签: json shell export-to-csv jq