如何使用jq将json转换为csv文件?

时间:2018-03-12 04:21:57

标签: json csv jq

这是我的json文件:

{
  "ClientCountry": "ca",
  "ClientASN": 812,
  "CacheResponseStatus": 404,
  "CacheResponseBytes": 130756,
  "CacheCacheStatus": "hit"
}
{
  "ClientCountry": "ua",
  "ClientASN": 206996,
  "CacheResponseStatus": 301,
  "CacheResponseBytes": 142,
  "CacheCacheStatus": "unknown"
}
{
  "ClientCountry": "ua",
  "ClientASN": 206996,
  "CacheResponseStatus": 0,
  "CacheResponseBytes": 0,
  "CacheCacheStatus": "unknown"
}

我想将这些json转换为csv,如下所示。

"ClientCountry", "ClientASN","CacheResponseStatus", "CacheResponseBytes", "CacheCacheStatus"
"ca", 812, 404, 130756, "hit";
"ua", 206996, 301, 142,"unknown";
"ua", 206996, 0,0,"unknown";

请告诉我如何使用jq实现此目的?

我刚试过以下。但它不起作用。

jq 'to_entries[] | [.key, .value] | @csv'

此致 帕拉尼

2 个答案:

答案 0 :(得分:2)

因为你想要所有的键值, 然后假设键在输入文件中以一致的顺序呈现,您可以简单地写:

jq -r '[.[]] | @csv' palanikumar.json

使用给定的输入,将生成以下CSV:

"ca",812,404,130756,"hit"
"ua",206996,301,142,"unknown"
"ua",206996,0,0,"unknown"

添加标题和尾随分号(如果你真的想要它们)留作(非常简单)练习。

订购不一致

如果键的顺序不同或可能有所不同,则可以使用以下内容生成合适的CSV,假设应使用输入流中第一个对象中键的顺序:

input
| . as $first
| keys_unsorted as $keys
| $keys, [$first[]], (inputs | [.[$keys[]]]) | @csv

适当调用jq将包括-n和-r命令行选项。

答案 1 :(得分:0)