json - 如何使用 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
解决方案
如果正确理解了问题,您可以做的是拥有一个所有键都设置为 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",,
推荐阅读
- c# - 当通过网络流发送的数据包中未用完整个保留的 8 个字节时,如何填写空白
- javascript - Bootsrap 最后轮播图像过渡故障
- security - 我们是否需要在 kerberos 中重放缓存
- c# - 在原始实例中止后,被调用方法中的新任务实例不执行内部代码
- android - (场景)如何使用纹理,使用 .mat 文件
- node.js - 可以使用 formData 和 express 上传获得未定义值的文件。怎么解决?
- chef-infra - 使用 Chef infra 客户端卸载软件时 10 分 43 秒后失败
- sas - SAS - 将非数字值放在直方图 sgplot 的 X 轴上
- c# - 带有抽象方法的 C# 枚举
- vector - 如何确保多个语句都返回 Some?