【问题标题】:jq pass argument as a key to new fieldjq 将参数作为新字段的键传递
【发布时间】:2020-09-18 10:46:51
【问题描述】:

我正在尝试使用 jq 在 json 文件中添加新字段:

jq -r --arg k "foo" --arg v "bar"  '.newField += {$k:$v}' myfile

但结果是:

jq: error: syntax error, unexpected ':', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.newField += {$k:$v}                
jq: error: May need parentheses around object key expression at <top-level>, line 1:
.newField += {$k:$v}              
jq: 2 compile errors

当我像下面这样删除关键变量时,它工作正常:

jq -r --arg k "foo" --arg v "bar"  '.newField += {"static_key":$v}' myfile

知道如何使用 jq arg 中的键名吗?

【问题讨论】:

    标签: json bash key jq


    【解决方案1】:

    如错误消息所示,在键周围加上括号:

    jq -r --arg k "foo" --arg v "bar"  '.newField += {($k):$v}' myfile
    

    jq 要求由表达式(即不是文字字符串)给出的键加上括号 (noted in the manual)。

    【讨论】:

    • 赞成这是一个有效的解决方案,并且在某些情况下是有用的知识和更好的解决方案 - 但是在 OPs 用例中,我确实认为 michaels 的答案更好。
    【解决方案2】:

    如果这有帮助,使用以下方法将 arg var 本身用作 json 键,并将 arg 值用作 json 值:

    $ jq -r --arg foo "bar"  '.newField += {$foo}' myfile
    ....
    "newField": {
        "foo": "bar"
    }
    

    【讨论】:

    • 这是正确的答案 - David Z 也有效,但将它们分配为单独的元素没有什么意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多