Json 如何在jq中向CSV导出添加标题?
我正在从Json 如何在jq中向CSV导出添加标题?,json,csv,jq,Json,Csv,Jq,我正在从jq获取一个修改过的命令: 哪个csv导出良好,但缺少顶部的标题: "Fix README","Nicolas Williams" "README: send questions to SO and Freenode","Nicolas Williams" "usage() should check fprintf() result (fix #771)","Nicolas Williams" "Use jv_mem_alloc() in compile.c (fix #771)","N
jq
获取一个修改过的命令:
哪个csv
导出良好,但缺少顶部的标题:
"Fix README","Nicolas Williams"
"README: send questions to SO and Freenode","Nicolas Williams"
"usage() should check fprintf() result (fix #771)","Nicolas Williams"
"Use jv_mem_alloc() in compile.c (fix #771)","Nicolas Williams"
"Fix header guards (fix #770)","Nicolas Williams"
如何在顶部添加标题(在本例中为
消息,名称
)?(我知道可以手动执行,但如何在jq
?)中执行)只需在值前面的数组中添加标题文本即可
["Commit Message","Committer Name"], (.[].commit | [.message,.committer.name]) | @csv
根据Anton对Jeff Mercado答案的评论,此代码段将获取第一个元素属性的键名称,并将它们作为行之前的数组输出,从而将它们用作标题。如果不同的行具有不同的属性,那么它将无法正常工作;同样,生成的CSV也不会
map({message:.commit.message,name:.commit.committer.name})|([0]| to|u entries | map(.key)),([]|[.]])|@csv
当我完全意识到OP在寻找一个纯粹的jq答案时,我发现这个问题在寻找任何答案。所以,让我为像我这样的人提供一个我发现的(并且发现有用的)
sudo-apt-install-moreutils
-如果您还没有李>
echo“Any,column,name,that,is,not,in,your,json,object”| cat-your.csv | scape your.csv
moreutils
包,不只是依赖于jq
,所以有些人会说不够优雅,这是可以理解的
优点:您可以选择标题,而不是JSON键。此外,纯粹的jq
方式也会被键的排序所困扰
它是如何工作的?
tee
来完成,而无需安装任何软件包!
不,你不能,因为。除非你对在某个时候丢失csv感到满意。谢谢,杰夫!当你必须修改所选的列时,有没有办法不重复标题来处理这些情况呢?我不确定你能做些什么。您需要为所需的每个值添加一个标题列。你有没有一个具体的例子来说明你想做什么?我计划在多个例子中使用它,所以最初的例子是正确的模式。我试着像你一样使用
map()
函数,但没有成功。我的一些。非常感谢,圣地亚哥!我刚刚发现,该方法按名称对标题进行排序,但不对相应的列进行排序。有什么办法可以避免这种情况吗?目前,我通过使用前缀“c1_u”、“c2_u”、“c3_u”等命名标题来解决“排序标题”问题。虽然不雅致,但很有效。最好知道一种使用map添加标题的正确方法,而不用自动排序标题!这个线程中的解决方案已经为我正确地解决了这个问题(没有解决方法)。它做同样的事情,但没有排序的关键。“纯粹的jq方式被键的排序所困扰”——这只适用于有缺陷或专横的程序。
["Commit Message","Committer Name"], (.[].commit | [.message,.committer.name]) | @csv