【问题标题】:JQ: Convert Dictionary with List as Values to flat CSVJQ:将列表作为值的字典转换为平面 CSV
【发布时间】:2021-12-29 12:05:15
【问题描述】:

原始数据

我有以下 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那个:

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

所以我尝试结合

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

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

我准备了一些至少可以编译的东西here

【问题讨论】:

    标签: json jq export-to-csv


    【解决方案1】:

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

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

    .[$k][] 构造是一个表达式,它首先扩展与每个键关联的值,即.foo,然后使用object construction,为每个标识并存储在$k 变量中的键生成多个结果。

    【讨论】:

    • 最初我在理解您的答案时遇到了问题,因为我认为“keys_unsorted”指的是某种数据。不知道是builtin function。也许您可以对此添加评论。这里还有你的例子的 jqplay 链接:jqplay.org/s/SfCs8Y5zN5
    猜你喜欢
    • 2011-12-08
    • 2016-06-16
    • 2014-04-24
    • 2016-08-03
    • 2017-04-11
    • 2020-01-03
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多