【问题标题】:How to convert json into csv file using jq?如何使用 jq 将 json 转换为 csv 文件?
【发布时间】:2018-08-20 01:17:30
【问题描述】:

这是我的 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'

问候 帕拉尼

【问题讨论】:

    标签: json csv jq


    【解决方案1】:

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

    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 命令行选项。

    【讨论】:

    • 兄弟我尝试了很多来获取标题。但无法获取以 csv 格式提取标题的命令。试过这个 jq -r 'keys[]' sample.json。请帮忙
    【解决方案2】:

    【讨论】:

    • @Palanikumar 您尝试添加 -r 吗? ( jq -r )
    • 好吧,检查@peak的答案,然后重试
    • 据我所知,这是问题[.key, .value]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多