打印缺少键的空字符串并将结果转换为 CSV
Print empty string for a missing key and converting the result to CSV
我正在尝试使用 jq 命令将下方JSON 转换为 CSV,但最终的 CSV 无法正确放置 deviceName 字段,因为它在某些 JSON 行中缺失。
{
"id": "ABC",
"deviceName": "",
"total": 100,
"master": 20
}
{
"id": "ABC",
"total": 100,
"master": 20
}
如何确保在缺少 Key 时获取空值?
我试过下面的命令来生成 CSV
./jq -r '[.[]] | @csv' > final.csv
但是它会给出如下所示的 CSV,正如您所看到的那样 JSON 中缺少 deviceName 键是单元格向左移动。
"ABC","",100,20
"ABC",100,20
我想要如下所示的输出,如果缺少 deviceName,它会添加空值。
"ABC","",100,20
"ABC","",100,20
在 jq
中,您可以使用可用于 return 默认值的备用运算符 //
。例如。如果输入
中没有 .foo
元素,.foo // 1
将计算为 1
使用它并附加一个空字符串""
如果密钥不存在,你可以这样做
jq -r '[.id // "", .deviceName // "", .total // "", .master // ""] | @csv'
注意:当foo
的值为[=20=时,备用运算符.foo // 1
导致评估为1
] 或 false
。如果您的数据包含 null
或 false
值,您可能希望修改上述程序。
您可以将第一个对象作为完整记录的参考,例如
keys_unsorted as $k | (., inputs) | [.[$k[]]] | @csv
对于您的样本,这会产生以下结果
"ABC","",100,20
"ABC",,100,20
我正在尝试使用 jq 命令将下方JSON 转换为 CSV,但最终的 CSV 无法正确放置 deviceName 字段,因为它在某些 JSON 行中缺失。
{
"id": "ABC",
"deviceName": "",
"total": 100,
"master": 20
}
{
"id": "ABC",
"total": 100,
"master": 20
}
如何确保在缺少 Key 时获取空值?
我试过下面的命令来生成 CSV
./jq -r '[.[]] | @csv' > final.csv
但是它会给出如下所示的 CSV,正如您所看到的那样 JSON 中缺少 deviceName 键是单元格向左移动。
"ABC","",100,20
"ABC",100,20
我想要如下所示的输出,如果缺少 deviceName,它会添加空值。
"ABC","",100,20
"ABC","",100,20
在 jq
中,您可以使用可用于 return 默认值的备用运算符 //
。例如。如果输入
.foo
元素,.foo // 1
将计算为 1
使用它并附加一个空字符串""
如果密钥不存在,你可以这样做
jq -r '[.id // "", .deviceName // "", .total // "", .master // ""] | @csv'
注意:当foo
的值为[=20=时,备用运算符.foo // 1
导致评估为1
] 或 false
。如果您的数据包含 null
或 false
值,您可能希望修改上述程序。
您可以将第一个对象作为完整记录的参考,例如
keys_unsorted as $k | (., inputs) | [.[$k[]]] | @csv
对于您的样本,这会产生以下结果
"ABC","",100,20
"ABC",,100,20