JQ:将列表为值的字典转换为平面CSV



原始数据

我有以下JSON:

{
"foo":[
"asd",
"fgh"
],
"bar":[
"abc",
"xyz",
"ert"
],
"baz":[
"something"
]
}

现在我想把它转换成一个";扁平的";CSV,这样对于我的对象中的每个键,值中的列表都会扩展到n行,其中n是相应列表中的条目数。

预期输出

foo;asd
foo;fgh
bar;abc
bar;xyz
bar;ert
baz;something

方法

我想我需要使用to_entries,然后对每个.value使用,对第一列重复相同的.key。jq文档指出:

因此as的功能类似于foreach循环。

所以我尝试合并

  • to_entries为字典中的键和值提供一个可访问的名称
  • 然后围绕.value构建一个foreach循环
  • 并将结果传递给@csv

to_entries|map(.value) as $v|what goes here?|@csv

我准备了一些东西,至少可以在这里编译

不需要使用_entries函数,一个简单的键/值查找和字符串插值就足以满足

keys_unsorted[] as $k | "($k);( .[$k][])"

构造.[$k][]是一个表达式,它首先扩展与每个键相关的值,即.foo,然后通过对象构造,为识别并存储在$k变量中的每个键生成多个结果。

最新更新