将JSON转换为TSV

将JSON转换为TSV,json,header,export-to-csv,jq,Json,Header,Export To Csv,Jq,给定这样的JSON文件 [ { "h1": "x1", "h2": "x2" }, { "h1": "y1", "h2": "y2" } ] 我使用以下jq代码将其提取为一个有头TSV。但是我需要指定两次标题名。有没有办法只指定一次标题名?谢谢 [ "h1" , "h2" ], (.[] | [ .h1 , .h2 ]) | @tsv 下面是一个相对健壮的jq脚本,用于使用第一个对象中的键名打印带有标题的TSV

给定这样的JSON文件

[
  {
    "h1": "x1",
    "h2": "x2"
  },
  {
    "h1": "y1",
    "h2": "y2"
  }
]
我使用以下jq代码将其提取为一个有头TSV。但是我需要指定两次标题名。有没有办法只指定一次标题名?谢谢

[
    "h1"
    , "h2"
], (.[] | [ 
    .h1
    , .h2
]) | @tsv

下面是一个相对健壮的jq脚本,用于使用第一个对象中的键名打印带有标题的TSV:

(.[0] | keys_unsorted) as $keys
| $keys,  (.[] | [.[$keys[]]])
| @tsv  

当然,这采用了-r命令行选项。

这里有一个相对健壮的jq脚本,用于使用第一个对象中的键名打印带有标题的TSV:

(.[0] | keys_unsorted) as $keys
| $keys,  (.[] | [.[$keys[]]])
| @tsv  

当然,这采用了-r命令行选项。

如果您的所有对象始终具有这两个键而没有其他键,那么您甚至不需要指定一次标题:
[[0]|keys[]],[]| map(values)|@tsv
将用于强调不同需求的各种方法,请参见@Aaron-以这种方式使用
值,在这种情况下使用
值是自找麻烦的。@peak我希望它能以类似于
键的方式工作,当我看到它与示例一样工作时,我就这样做了。我现在知道它会忽略
null
值,但是还有其他问题吗?
null
的可能出现是我想到的主要问题。如果所有对象总是有这两个键而没有其他键,那么您甚至不需要指定一次标题:
[[0]|键[],[]|映射(值)|@tsv
将要了解各种突出不同需求的方法,请参阅@Aaron-以这种方式使用
值,在这种情况下是自找麻烦的。@peak我希望它能以类似于
键的方式工作,当我看到它与示例一样工作时,我就使用了它。我现在看到它会忽略
null
值,但是还有其他问题吗?可能出现的
null
是我想到的主要问题。如果我想指定键,因为默认顺序可能无法满足我的需要,并且不应该打印json文件中的所有字段,该怎么办。@user1424739-您可以通过更改解决方案,例如,
[“x”、“y”、“z”]作为$keys
。如果我想将这些键指定为默认顺序,可能无法满足我的需要,也不应该打印json文件中的所有字段。@user1424739-您可以通过更改解决方案中的第一行来指定所需的键,例如,
[“x”、“y”、“z”]作为$keys