使用jq将json键和值解析为CSV

时间:2019-08-06 06:09:00

标签: json export-to-csv jq

我是jq的新手,很高兴使用它。我想用python实现的目标是可能的,但目的是学习jq。我正在尝试使用curl命令处理JSON。

下面是我的curl命令的响应

{
    "results": [{
            "name": "smith Jones",
            "DOB": "1992-03-26",
            "Enrollmentdate": "2013-08-24"

        },

        {
            "name": "Jacob Mathew",
            "DOB": "1993-03-26",
            "Enrollmentdate": "2014-10-02"
        },

        {
            "name": "Anita Rodrigues",
            "DOB": "1994-03-26",
            "Enrollmentdate": "2015-02-19"
        }
    ]
}

我能够在某种程度上获得所需的输出。但是我无法在输出中打印密钥本身。当我将此csv文件(file.csv)导出到excel中时,我需要此信息以便以后将其用作列标题。我打算编写一个bash脚本以使csv变得更好。

<curl-command>|jq '.results | map(.name), map(.DOB), map(.Enrollmentdate) | @csv' >file.csv

我能够得到如下输出

smith jones, jacob Mathew, Anita Rodrigues
1992-03-26,  1993-03-26,  1994-03-26
2013-08-24,  2014-10-02,  2015-02-19 

我要实现的目标如下

name:smith jones, name:jacob Mathew, name:Anita Rodrigues
DOB:1992-03-26,  DOB:1993-03-26,  DOB:1994-03-26
Enrollmentdate:2013-08-24,  Enrollmentdate:2014-10-02, Enrollmentdate:2015-02-19

1 个答案:

答案 0 :(得分:1)

  1. 由于您想要键名称及其值,然后调整方法,因此可以将以下内容与-r命令行选项结合使用以生成CSV:
    .results
    | map(to_entries[] | select(.key=="name")),
      map(to_entries[] | select(.key=="DOB")),
      map(to_entries[] | select(.key=="Enrollmentdate"))
    | map("\(.key):\(.value)" )
    | @csv`
  1. 如果要使用CSV,请坚持上述操作;如果您有信心引用字符串 永远不需要,请将@csv更改为join(", ");如果要删除报价 仅在不需要时才进行标记,您可以为简单的过滤器添加一个def来做到这一点。

  2. 上面to_entries的重复有点让人讨厌。您可能要考虑如何避免这种情况。