【问题标题】:Any JQ built-in function returning index of element in JSON array?任何 JQ 内置函数返回 JSON 数组中元素的索引?
【发布时间】:2015-09-10 10:23:48
【问题描述】:

我从输入 JSON 文件创建了一个 csv 输出。

由于某些 JSON 数组没有自己的 id,我需要在我的 csv 输出中添加一个唯一 id,该 id 将基于其 JSON 数组中当前元素的索引。

有没有返回元素索引的内置JQ函数?

【问题讨论】:

  • 我找到了使用 keys 函数的解决方案:.a |键[] 作为 $k | [$k, .[$k].s] | @csv for 输入文件 { "a":[{"s":"aa"},{"s":"bb"},{"s":"cc"},{" s":"dd"},{"s":"ee"}] } 将产生以下正确的索引输出: 0,"aa" 1,"bb" 2,"cc" 3,"dd" 4," ee"

标签: arrays json jq


【解决方案1】:

to_entries 应该可以完美运行。

jq -n '["a","b","c"] | to_entries'

会产生

[{"key":0,"value":"a"},{"key":1,"value":"b"},{"key":2,"value":"c"}]

【讨论】:

    【解决方案2】:

    有两种健壮的(即在 jq 1.3、1.4 和 1.5 中工作)方法来遍历具有索引的数组:一种是使用 keys[](它适用于数组和对象),而其他使用范围/2。这两种方法可以说明如下,假设 $a 是一个数组:

    ($a | keys[]) as $i | [$i, $a[$i]] 
    
    range(0; $a | length) as $i | [$i, $a[$i]]
    

    或者更简洁:

    $a | keys[] as $i | [$i, .[$i]]
    
    $a | range(0;length) as $i | [$i, .[$i]]
    

    如果您的 jq 有 keys_unsorted,您可能希望使用它。

    (index/1 可能不是这里需要的。)

    【讨论】:

      【解决方案3】:

      从 jq 1.4 开始,index/1 或 indices/1 如manual 中所述。

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 2011-10-25
        • 2012-11-13
        • 1970-01-01
        • 2014-04-28
        • 2022-11-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多