我是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
答案 0 :(得分:1)
.results
| map(to_entries[] | select(.key=="name")),
map(to_entries[] | select(.key=="DOB")),
map(to_entries[] | select(.key=="Enrollmentdate"))
| map("\(.key):\(.value)" )
| @csv`
如果要使用CSV,请坚持上述操作;如果您有信心引用字符串
永远不需要,请将@csv
更改为join(", ")
;如果要删除报价
仅在不需要时才进行标记,您可以为简单的过滤器添加一个def来做到这一点。
上面to_entries
的重复有点让人讨厌。您可能要考虑如何避免这种情况。