【问题标题】:Print empty string for a missing key and converting the result to CSV打印缺失键的空字符串并将结果转换为 CSV
【发布时间】:2020-05-14 13:49:52
【问题描述】:

我正在尝试使用 jq 命令将 belowJSON 转换为 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

【问题讨论】:

    标签: json stream export-to-csv jq missing-data


    【解决方案1】:

    您可以将第一个对象作为完整记录的参考,例如

    keys_unsorted as $k | (., inputs) | [.[$k[]]] | @csv
    

    对于您的示例,这会产生以下结果

    "ABC","",100,20
    "ABC",,100,20
    

    【讨论】:

      【解决方案2】:

      jq 中,您可以使用可用于返回默认值的备用运算符//。例如。如果输入中没有 .foo 元素,.foo // 1 将评估为 1

      如果密钥不存在,使用它并附加一个空字符串"",您可以这样做

      jq -r '[.id // "", .deviceName // "", .total // "", .master // ""] | @csv'
      

      注意:当foo 的值为nullfalse 时,备用运算符.foo // 1 导致评估为1。如果您的数据包含nullfalse 值,您可能希望修改上述程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 2019-06-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多