【问题标题】:dynamic editing json strings using jq使用jq动态编辑json字符串
【发布时间】:2017-11-30 19:19:30
【问题描述】:

我可以使用 jq 工具制作一个可动态编辑的 json 结构,将 json 数据在 shell 字符串中来回存储。

例如,我正在尝试在此工作代码中的结构中添加一个字段:

echo '{"a":{"b":1}}' | jq -c '.a |= .+ {c:2}'
{"a":{"b":1,"c":2}}

但是使用这样的 shell 函数:

jq_add () {
 eval $1=\"$(eval echo \$$1 | $JQ --argjson q1 "$(printf '\"%s\"'     "$2")" --argjson q2 "$(printf '\"%s\"' "$3")" '.[$q1] |= .+ $q2')\"
}

v='{"a":{"b":1}}'
jq_add v "a" "{c:2}"
echo $v

答案是: jq: error (at :1): object ({"b":1}) 和 array (["{c:2}"]) 无法添加

【问题讨论】:

    标签: json bash environment-variables sh jq


    【解决方案1】:

    我建议您采用一种不易出错的策略。我不确定这是否明智,但以下内容实现了您似乎想要做的大部分事情。无论如何,请注意--argjson x v 期望v 是有效的JSON:{c:2} 是无效的JSON。

    #!/bin/bash
    
    JQ=jq
    
    function jq_add {
       $JQ --argjson q1 "$1"  --argjson q2 "$2"  '.[$q1] += $q2'
    }
    
    
    v='{"a":{"b":1}}'
    v=$(echo "$v" | jq_add '"a"' '{"c":2}')
    echo "$v"
    

    【讨论】:

    • 这正是我想要的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多