gpt4 book ai didi

bash - 用 jq 重新组织对象字段

转载 作者:行者123 更新时间:2023-12-05 04:15:38 42 4
gpt4 key购买 nike

我想知道是否有一种方法可以使用 jq 重新组织对象的字段。

我是说,鉴于此

{
"prop1": 1,
"prop2": {
"nested": 0
},
"prop3": true
}

我想要这个

{
"prop1": 1,
"prop3": true,
"prop2": {
"nested": 0
}
}

我想选择字段的顺序(不考虑字段的类型或字母顺序,只是我的选择:))

谢谢!

最佳答案

[以下是最初于 2015 年 8 月 (!) 发布的答案的更新。]

对于 jq 1.4 及以上版本,明确指定特定键顺序的最简单方法是使用

{foo, bar, ...}

指定对象的形式。例如。如果 input.json 具有问题中显示的 JSON,则:

jq -Mc '{prop1, prop3, prop2}' input.json

产生:

{"prop1":1,"prop3":true,"prop2":{"nested":0}}

在这种情况下,只有顶级键的顺序受到影响。

OP 指出需要对 JSON 进行规范化,以便可以使用面向文本的 diff。出于此类目的,无论嵌套多深,通常都需要对对象进行规范化。为此,jq(1.4 及更高版本)具有 -S 命令行选项。


[带有更新的原始答案如下。]

以下是上面给出的“inorder”的变体。直接构造所需的 JSON 对象(不是字符串化版本)。这适用于 jq 1.4 及更高版本,因为(默认情况下) key 按创建顺序有效存储。

def orderKeys(keys):
. as $in
| reduce keys[] as $key ({}; . + { ($key): $in[$key] });

# Example:
orderKeys( ["prop1", "prop3", "prop2"] )

在名为 order-keys.jq 的文件中使用上述内容,并使用任务描述中的 JSON 作为输入,命令:

$ jq -M -n -c -f order-keys.jq

产生:

{"prop1":1,"prop3":true,"prop2":{"nested":0}}

关于bash - 用 jq 重新组织对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31719737/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com