到目前为止,我见过的所有例子都“减少”输出(过滤掉)某些部分。我理解如何操作我想要的输入部分,但我还没有弄清楚如何输出其他内容“未触动”。
特定示例是一个输入文件,其中包含几个高级条目“array1”,“field1”,“array2”,“array3”。每个数组内容都不同。我想要做的具体处理是通过“name”字段对“array1”条目进行排序,该字段可以通过以下方式进行:
jq '.array1 | sort_by(.name)' test.json
但我也希望此输出为“array1”以及要保留的所有其他数据。
示例输入:
{
"field1": "value1",
"array1":
[
{ "name": "B", "otherdata": "Bstuff" },
{ "name": "A", "otherdata": "Astuff" }
],
"array2" :
[
array2 stuff
],
"array3" :
[
array3 stuff
]
}
预期产出:
{
"field1": "value1",
"array1":
[
{ "name": "A", "otherdata": "Astuff" },
{ "name": "B", "otherdata": "Bstuff" }
],
"array2" :
[
array2 stuff
],
"array3" :
[
array3 stuff
]
}
我尝试过使用map但是我似乎无法正确处理语法,以便能够处理除了我希望按名称排序的数组之外的任何类型的输入。
答案 0 :(得分:1)
每当使用赋值运算符(=
,|=
,+=
等)时,表达式的上下文保持不变。因此,只要您的顶级过滤器是分配,最后,您将获得其余数据(应用您的更改)。
在这种情况下,您只需对array1
数组进行排序,以便只更新数组。
.array1 |= sort_by(.name)