JQ:将列表作为值的字典转换为平面 CSV
JQ: Convert Dictionary with List as Values to flat 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 docs state 即:
Thus as
functions as something of a foreach loop.
所以我尝试合并
to_entries
为我的字典中的键和值提供一个易于访问的名称
- 然后围绕
.value
s 构建一种 foreach 循环
- 并将结果传递给
@csv
to_entries|map(.value) as $v|what goes here?|@csv
我准备了至少可以编译的东西here
不需要使用 _entries 函数,一个简单的 key/value 查找和字符串插值就足够了
keys_unsorted[] as $k | "\($k);\( .[$k][])"
构造 .[$k][]
是一个表达式,它首先扩展与每个键关联的值,即 .foo
然后 object construction,为每个识别并存储在中的键生成多个结果$k
变量。
原始数据
我有以下 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 docs state 即:
Thus
as
functions as something of a foreach loop.
所以我尝试合并
to_entries
为我的字典中的键和值提供一个易于访问的名称- 然后围绕
.value
s 构建一种 foreach 循环
- 并将结果传递给
@csv
to_entries|map(.value) as $v|what goes here?|@csv
我准备了至少可以编译的东西here
不需要使用 _entries 函数,一个简单的 key/value 查找和字符串插值就足够了
keys_unsorted[] as $k | "\($k);\( .[$k][])"
构造 .[$k][]
是一个表达式,它首先扩展与每个键关联的值,即 .foo
然后 object construction,为每个识别并存储在中的键生成多个结果$k
变量。