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 对第一列重复相同的 .keyjq docs state 即:

Thus as functions as something of a foreach loop.

所以我尝试合并

  • to_entries为我的字典中的键和值提供一个易于访问的名称
  • 然后围绕 .values
  • 构建一种 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变量。