JQ -c / --compact-output工作不正常? Json解析

时间:2018-02-15 23:36:27

标签: json database parsing jq

我刚刚在一个小时前发布的一个问题中向JQ介绍过,我正在解析一个非常大的数据库,但是JQ输出看起来像这样:

"removedforprivacy@gmail.com"  
"john"  
"smith"  
null  
null  
"123 road st"  
null  
"Columbia"  
"29203"  
"SC"  
null  

相反,我希望它看起来像这样:

"removedforprivacy@gmail.com"
"john"
"smith"
null
null
"123 road st"
null
"Columbia"
"29203"
"SC"
null

甚至更好:

"removedforprivacy@gmail.com","john","smith",null,null,"123,road,st",null,"Columbia","29203","SC",null

我目前正在使用此命令:

jq -c '(.email, .first_name, .last_name, .ip, .address, .address1, .address2, .city, .zip, .state, .phone)' file.json > file2.json 

我也尝试过使用这个命令:

jq -compact-output '(.email, .first_name, .last_name, .ip, .address, .address1, .address2, .city, .zip, .state, .phone)' file.json > file2.json 

但是file2.json仍然会显示如下数据:

"removedforprivacy@gmail.com"  
"john"  
"smith"  
null  
null  
"123 road st"  
null  
"Columbia"  
"29203"  
"SC"  
null  

简而言之,我想将输出转换为看起来像csv或csv的东西,这样我就可以更好地管理它。

该命令不起作用,只需要一次使用此命令。

1 个答案:

答案 0 :(得分:0)

如果你想要CSV,那么你当然可以简单地使用@csv过滤器,但是@csv会将null转换为空字段:

"removedforprivacy@gmail.com","john","smith",,,"123 road st",,"Columbia","29203","SC",

要按照您想要的方式处理字符串和null,您可以将@tsv与-r命令行选项结合使用,如下所示:

map(if type == "string" then "\"\(.)\"" else "null" end)
| @tsv | gsub("\t";",") 

根据您的输入,这会产生:

"removedforprivacy@gmail.com","john","smith",null,null,"123 road st",null,"Columbia","29203","SC",null

对于其他变体,您可能希望使用join/1和/或-j命令行选项。

-c命令行选项

正如手册所述:

  

使用此选项将导致更紧凑的输出,而不是将每个JSON对象放在一行上。

这里" JSON对象"意味着" JSON实体"。