给定以下结构:
[
{
"authorizedKey": "0",
"description": "This key is for system testing.",
"keyExpiration": "2035-02-02T18:28:59Z",
"keyId": "aaa12345-1234-1234-1234-1234567890ab"
},
{
"authorizedKey": "1",
"description": "This key is for system testing.",
"keyExpiration": "2035-02-02T18:28:59Z",
"keyId": "bbb12345-1234-1234-1234-1234567890ab"
},
{
"authorizedKey": "1",
"description": "This key is for system testing.",
"keyExpiration": "2035-02-02T18:28:59Z",
"keyId": "ccc12345-1234-1234-1234-1234567890ab"
}
]如果只使用jq,有没有办法把它转换成下面的结构?或者我需要把它包装在某种外部逻辑中?
[
{
"authorizedKey": "zero",
"description": "This key is for system testing.",
"keyExpiration": "2035-02-02T18:28:59Z",
"keyId": "aaa12345-1234-1234-1234-1234567890ab"
},
{
"authorizedKey": "one",
"description": "This key is for system testing.",
"keyExpiration": "2035-02-02T18:28:59Z",
"keyId": "bbb12345-1234-1234-1234-1234567890ab"
},
{
"authorizedKey": "one",
"description": "This key is for system testing.",
"keyExpiration": "2035-02-02T18:28:59Z",
"keyId": "ccc12345-1234-1234-1234-1234567890ab"
}
]发布于 2019-02-26 06:54:52
这是可行的:
map(. + {authorizedKey: {"0": "zero", "1": "one"}[.authorizedKey]})如果除了0和1之外还有其他值,则可以将它们添加到映射中。如果你有更多,并且你想提高可读性,你可以这样做:
{"0": "zero", "1": "one"} as $mapping |
map(. + {authorizedKey: $mapping[.authorizedKey]})这避免了在代码中间写入值映射。
这是因为+运算符是在jq中的对象上定义的,并且如果RHS中的键已经存在于LHS中,那么它的值将被替换为来自RHS的相应值。
https://stackoverflow.com/questions/54875776
复制相似问题