我们正在使用CTools库构建一个网站,这个库有一个图形化的仪表板编辑器,可以为仪表板的一部分写出JSON格式的文件。
我想在检入到git之前对这些文件进行转换,以便先按键排序,然后再按某些键的值排序。这样做的目的是为了让区分变得更容易,因为编辑器习惯于重新排列所有的json字段。
例如,我们可能有这样的内容:
{
"components": {
"rows": [
{
"id": "CHARTS",
"name": "Charts",
"parent": "UnIqEiD",
"properties": [
{
"name": "Group",
"type": "Label",
"value": "Charts"
}
],
"type": "Label",
"typeDesc": "<i>Group</i>"
},
{
"id": "kjalajsdjf",
"meta_cdwSupport": "true",
"parent": "CHARTS",
"properties": [
{
"name": "name",
"type": "Id",
"value": "Value1"
},
{
"name": "title",
"type": "String",
"value": "Value2"
},
{
"name": "listeners",
"type": "Listeners",
"value": "[]"
},
...
我们可以使用jq --sort-keys
(http://stedolan.github.io/jq/)来对所有键进行排序,但是我正在努力找出如何使用sort_by
函数来根据特定键的值对特定元素进行排序(因此,在上面的示例中,按照properties.name
进行排序。有什么想法吗?
发布于 2015-05-20 01:48:22
好了,在IRC频道的帮助下,我找到了答案。
基本上,它看起来是这样的:
jq \
'.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' \
file.json > out.json
选择正确的对象,
如果需要,可以进入数组,
然后sort_by
一个值。
我正在尝试sort_by(.components.rows.id)
,但失败了。
|=
而不是|
传递这些值,而不是剥离它们。
发布于 2019-09-19 20:46:11
这并没有回答这个问题,但这里有另一种按属性/键排序的方法:
jq --sort-keys . my_file > sorted_file
-或者-
jq -S . my_file > sorted_file
https://stackoverflow.com/questions/30331504
复制相似问题