首页 > 解决方案 > 如何使用 jq 将这种格式的 json 转换为 csv

问题描述

我有一个以这种方式格式化的 json 文件:

{"key1": "value1"}
{"key2": "value2"}
{"key3": "value3"}

我想将此 json 转换为 csv。但是,文件中所有对象的键都不相同。我有一个所有可能键的列表,但其中一些可能在任何 json 对象中丢失。因此,如果是这种情况,我只想为该列插入一个空值。

如何将这种格式的 json 文件转换为我想要的 csv?

更新:这是一个名为 objects.json 的示例文件

{"key1": "value1", "key2": "value2"}
{"key1": "value3", "key2": "value4", "key3": "value5"}
{"key1": "value6", "key2": "value7", "key4": "value8"}

每个对象都在文件的新行上。

我有一个名为 allkeys.json 的 json 文件,其中包含一个包含所有可能具有空值的键的对象:

{"key1": null, "key2": null, "key3": null, "key4": null}

我想将 example.json 转换为包含所有列的 CSV 文件,并且对于任何缺少列的对象都有空值。

所以我想要的输出是:

key1,key2,key3,key4
value1,value2,,
value3,value4,value5,
value6,value7,,value8

标签: jsoncsvjq

解决方案


如果正确理解了问题,您可以做的是拥有一个所有键都设置为 null 的 json 文件,然后将它与缺少键的文件合并。然后,您将拥有一个包含所有密钥的新 json 文件,稍后您可以像往常一样将其转换为 csv。这可以使用jq add本示例中的方法来完成:

echo '{"key1":null}{"key2":null}{"key3":null}{"key4":null}{"key5":null}' > allkeys.json

echo '{"key1":"value1"}{"key2":"value2"}{"key3":"value3"}' > update.json

jq -s add allkeys.json update.json

输出:

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
  "key4": null,
  "key5": null
}

将转换添加到 csv:

jq -s add allkeys.json update.json | jq -r  '[.[]] | @csv'

输出:

"value1","value2","value3",,

推荐阅读