小编dr.*_*ion的帖子

使用jq有条件地修改对象属性

我有以下JSON示例:

[
    {
        "name": "val1",
        "expire": { "$value": 10 }
    },
    {
        "name": "val2",
        "expire": 20
    },
    {
        "name": "val3"
    }
]
Run Code Online (Sandbox Code Playgroud)

我想用jq将其转换为这种形式:

[
    {
        "name": "val1",
        "expire": 10
    },
    {
        "name": "val2",
        "expire": 20
    },
    {
        "name": "val3",
        "expire": null
    }
]
Run Code Online (Sandbox Code Playgroud)

我发现的所有内容都是if-then-else,但似乎我不知道如何构建正确的表达方式。

基于类型检查的条件,看起来像是正确的方法,但是只返回“编译”时错误,我不知道如何解决:

.[] | { name, expire: (if .expire then (if type(.expire) == "number" then .expire else .expire."$value" end) else null end) }
Run Code Online (Sandbox Code Playgroud)

基于"$value"检查的条件,以某种方式过滤掉第二个对象:

.[] | { name, expire: (if .expire then (if .expire."$value"? then …
Run Code Online (Sandbox Code Playgroud)

shell command-line json jq

6
推荐指数
1
解决办法
1332
查看次数

标签 统计

command-line ×1

jq ×1

json ×1

shell ×1