[英]Convert JSON file to CSV file using jq
我有名为 myresponse.json 的 JSON 文件。
"status":"CONTENT",
"valid":true,
"success":true,
"failure":false,
"content":{
"id":0,"resources":[{
"id":0,"value":52.51742935180664
},
{
"id":1,"value":13.392845153808594
},
{
"id":5,"value":"2021-02-09T13:15:15Z"
},
{
"id":6,"value":20.754192352294922
}]}}}
"status":"CONTENT",
"valid":true,
"success":true,
"failure":false,
"content":{
"id":0,"resources":[{
"id":0,"value":52.51742935180664
},
{
"id":1,"value":13.392845153808594
},
{
"id":5,"value":"2021-02-09T13:15:15Z"
},
{
"id":6,"value":20.754192352294922
}]}}}
使用 curl 获得。
我如何使用 jq 将 json 转换为 csv 文件,其中“0,1,5,6”必须是列,“0,1,5,6”的值必须分别占据 Z628CB5675FF524F3E719B7AAFE 文件的每一行,例如 this :
0,1,5,6
52.51742935180664, 13.392845153808594, "2021-02-09T13:15:15Z", 20.754192352294922
52.51742935180664, 13.392845153808594, "2021-02-09T13:15:15Z", 20.754192352294922
谢谢你的帮助!
以下假设输入由有效 JSON 对象的 stream 组成,沿问题中显示的行。
如果事先知道 .id 的相关值,则生成 header 行是微不足道的,考虑到灵活性的解决方案如下:
def oneline:
.content.resources
| INDEX(.[]; .id) | map_values(.value);
def emit($keys):
[.[ $keys[] ]];
[0,1,5,6] as $keys
| $keys,
(inputs | oneline | emit($keys))
| join(",")
由于这依赖于inputs
来读取输入,因此 jq 应该使用 -r 和 -n 选项调用(例如jq -rn -f program.jq
)
如果.id的相关值由stream中的第一个JSON object决定,则上述defs可以重复使用如下:
(input | oneline) as $first
| ($first | keys) as $keys
| $keys,
($first | emit($keys)),
(inputs | oneline | emit($keys))
| join(",")
此解决方案将与 jq 的 -r 和 -n 选项一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.