这是我的 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 命令行选项。