原始数据
我有以下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
变量中的每个键生成多个结果。