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

Pal*_*mar 9 csv json 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"
}
Run Code Online (Sandbox Code Playgroud)

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

"ClientCountry", "ClientASN","CacheResponseStatus", "CacheResponseBytes", "CacheCacheStatus"
"ca", 812, 404, 130756, "hit";
"ua", 206996, 301, 142,"unknown";
"ua", 206996, 0,0,"unknown";
Run Code Online (Sandbox Code Playgroud)

请让我知道如何使用 jq 实现此目的?

我只是在下面尝试过。但它不起作用。

jq 'to_entries[] | [.key, .value] | @csv'
Run Code Online (Sandbox Code Playgroud)

问候帕拉尼

pea*_*eak 10

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

jq -r '[.[]] | @csv' palanikumar.json
Run Code Online (Sandbox Code Playgroud)

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

"ca",812,404,130756,"hit"
"ua",206996,301,142,"unknown"
"ua",206996,0,0,"unknown"
Run Code Online (Sandbox Code Playgroud)

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

顺序不一致

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

input
| . as $first
| keys_unsorted as $keys
| $keys, [$first[]], (inputs | [.[$keys[]]]) | @csv
Run Code Online (Sandbox Code Playgroud)

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