【问题标题】:In article "How to convert arbitrary simple JSON to CSV using jq?" , what would be the jq command to accomplish this?在文章“如何使用 jq 将任意简单 JSON 转换为 CSV?” ,什么是 jq 命令来完成这个?
【发布时间】:2021-10-10 21:13:14
【问题描述】:

我的 json 文件基本上和这个一样,只是都在一行上。我的目标是获得一个 .csv 文件,如下所示的可能输出。我用 curl 命令获取 json 文件,我会放 jq 命令来获取 .csv 输出和 curl 命令的结尾吗?如有任何指导,我将不胜感激。

Input:

[
    {"code": "NSW", "name": "New South Wales", "level":"state", "country": "AU"},
    {"code": "AB", "name": "Alberta", "level":"province", "country": "CA"},
    {"code": "ABD", "name": "Aberdeenshire", "level":"council area", "country": "GB"},
    {"code": "AK", "name": "Alaska", "level":"state", "country": "US"}
]

Possible output:

code,name,level,country
NSW,New South Wales,state,AU
AB,Alberta,province,CA
ABD,Aberdeenshire,council area,GB
AK,Alaska,state,US

【问题讨论】:

标签: json jq


【解决方案1】:

您所指的文章有几个示例,说明在本地文件中拥有 JSON 后可以执行的操作。如果您想避免创建中间文件,您可以将 JSON 从curl 命令直接传送到 jq,例如大致如下:

curl ... | jq -fr myprogram.jq

但是,在实践中,以这种方式盲目地管道 curl 的输出有时会导致意外失败,尤其是当 curl 生成的实际输出(在标准输出上)包含某种标头非 JSON 标头时会发生这种情况。如果无法避免此类额外信息,则通常可以通过在管道中添加诸如sed 之类的文本处理命令来删除它,例如大致如下:

curl ... | sed 1,2d | jq -fr myprogram.jq

【讨论】:

  • json 文件有很多字符串 [{},{},{},{}],在字符串 {} 中有很多对象: "STK_NUM":"1004251 ", "DLR_COST":40.32 , "ACE_RTL_AMT":9.99,我将如何编写 jq 程序来创建密钥 STK_NUM、DLR_COST、ACE_RTL_AMT 作为我的 csv 输出文件中的标头,其中 [] 内的所有字符串的值列为 1004251、40.32、9.99?
  • 我建议您创建一个新问题,尽可能遵循minimal reproducible example 指南,最好包括您尝试过的内容。
猜你喜欢
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2018-08-20
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多