【问题标题】:How to remove last "column" in a hash of an array of array of hashes JSON input using jq 1.5?如何使用 jq 1.5 删除散列数组 JSON 输入数组的散列中的最后一个“列”?
【发布时间】:2022-01-06 01:20:34
【问题描述】:

我想将以下 JSON 内容存储在文件 tmp.json 中

{
    "results": [
        [
           {
               "field": "field1",
               "value": "value1-1"
           },
           {
               "field": "field2",
               "value": "value1-2"
           },
           {
               "field": "field3",
               "value": "value1-3"
           }
        ],
        [
           {
               "field": "field1",
               "value": "value2-1"
           },
           {
               "field": "field2",
               "value": "value2-2"
           },
           {
               "field": "field3",
               "value": "value2-3"
           }
        ],
        [
           {
               "field": "field1",
               "value": "value3-1"
           },
           {
               "field": "field2",
               "value": "value3-2"
           },
           {
               "field": "field3",
               "value": "value3-3"
           }
        ]
    ]
}

转成 CSV 输出:

"field1","field2"
"value1-1","value1-2"
"value2-1","value2-2"
"value3-1","value3-2"

我想出的最接近的 jq 表达式是这样的:

cat ./tmp.json | jq -r '.results | [ .[] | del(last) ] | (first | map(.field)), (.[] | map(.value)) | @csv'

它适用于 jq 1.6 版,但对于 1.5 版,最后一个“列”仍包含在 CSV 结果中。如何编辑 jq 代码以使其适用于 1.5 版?

注意列数不限于3;它可以更多。 jq 代码应该能够删除最终 CSV 结果中的最后一列。

【问题讨论】:

    标签: json jq export-to-csv


    【解决方案1】:

    您可以使用slice operator提取每个字段内的数组子元素并放入数组中并使用@csv

    [ .results[][:-1] ] | (first | map(.field)), (.[] | map(.value)) | @csv
    

    .results[][:-1] 部分提取数组中除最后一个元素之外的所有元素。来自手册

    任何一个索引都可以是负数(在这种情况下,它从数组的末尾向后计数),或者被省略(在这种情况下,它指的是数组的开头或结尾)。

    请参阅jqplay 以获得工作演示。


    我能够重现 jq-1.5 中的错误。这是一个众所周知的事实,即作为release 1.6 in del/1 的一部分修复了主要错误。因此,请考虑升级以使用 del/1 或使用上面答案中指示的切片表达式

    【讨论】:

      猜你喜欢
      • 2014-01-16
      • 2019-11-05
      • 1970-01-01
      • 2023-04-10
      • 2014-07-10
      • 2023-03-24
      • 2012-06-12
      • 2015-04-21
      • 2010-12-04
      相关资源
      最近更新 更多