如何使用 jq 1.5 删除散列数组 JSON 输入的散列中的最后一个 "column"?
How to remove last "column" in a hash of an array of array of hashes JSON input using jq 1.5?
我要转换存储在文件中的以下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 结果中的最后一列。
可以使用slice operator将数组中每个字段的子元素提取出来放入数组中,使用@csv
[ .results[][:-1] ] | (first | map(.field)), (.[] | map(.value)) | @csv
部分.results[][:-1]
提取数组中除最后一个元素之外的所有元素。来自手册
Either index may be negative (in which case it counts backwards from the end of the array), or omitted (in which case it refers to the start or end of the array).
有关工作演示,请参阅 jqplay。
我能够重现 jq-1.5 中的错误。众所周知, 修复了一些主要错误。因此,请考虑升级为使用 del/1 或使用上述答案中指示的切片表达式
我要转换存储在文件中的以下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 结果中的最后一列。
可以使用slice operator将数组中每个字段的子元素提取出来放入数组中,使用@csv
[ .results[][:-1] ] | (first | map(.field)), (.[] | map(.value)) | @csv
部分.results[][:-1]
提取数组中除最后一个元素之外的所有元素。来自手册
Either index may be negative (in which case it counts backwards from the end of the array), or omitted (in which case it refers to the start or end of the array).
有关工作演示,请参阅 jqplay。
我能够重现 jq-1.5 中的错误。众所周知,