代码之家  ›  专栏  ›  技术社区  ›  Ahmad Ismail

扁平化多个阵列以保持秩序

jq
  •  1
  • Ahmad Ismail  · 技术社区  · 3 年前

    我有一个json对象,类似于:

    {
      "Nemo": [
        3694756688,
        3694756832,
        3694756650
      ],
      "Firefox": [
        3694756795,
        3694756407,
        3694756412,
        3694756395
      ],
      "Codium": [
        3694756035,
        3694756383,
        3694756378
      ],
      "Terminals": [
        3694756804,
        3694756802,
        3694756428
    }
    

    我需要这样的输出:

    3694756688
    3694756832
    3694756650
    3694756795
    3694756407
    3694756412
    3694756395
    3694756035
    3694756383
    3694756378
    3694756804
    3694756802
    3694756428
    

    秩序很重要。我怎么能和jq一起做呢。

    3 回复  |  直到 3 年前
        1
  •  2
  •   pmf    3 年前

    keys_unsorted 按原始顺序为您提供密钥。您可以使用它们进行迭代:

    .[keys_unsorted[]][]
    

    Demo

    你也可以使用 .[] 迭代对象的字段,对于当前版本的jq,这会产生相同的结果,但不能保证保持这种状态:

    .[][]
    

    Demo

        2
  •  2
  •   Aaron    3 年前

    您可以使用以下筛选器:

    .Nemo[],.Firefox[],.Codium[],.Terminals[]
    

    你可以 try it here

        3
  •  1
  •   Andrej Kesely    3 年前

    另一种解决方案( demo ):

    cat your_file.json | jq -r "map(values) | flatten | .[]"
    

    打印:

    3694756688
    3694756832
    3694756650
    3694756795
    3694756407
    3694756412
    3694756395
    3694756035
    3694756383
    3694756378
    3694756804
    3694756802
    3694756428
    

    或者只是简单地( demo )谢谢@pmf:

    cat your_file.json | jq "flatten[]"