JQ如何将一个节点添加到一个完整的树中



向树中添加字段很简单:

echo '{ "a": "b" }' | jq '.'
{
"a": "b"
}
echo '{ "a": "b" }' | jq '. + { c: "d" }'
{
"a": "b",
"c": "d"
}

但是,通过只显示修改后的子树:,向现有对象添加字段并不能像预期的那样工作

echo '{ "e": { "f": "g" } }' | jq '.' 
{
"e": {
"f": "g"
}
}
echo '{ "e": { "f": "g" } }' | jq '.e + { h: "i" }' 
{
"f": "g",
"h": "i"
}

尝试了各种解决方案,但都没有提供所需的:

echo '{ "e": { "f": "g" } }' | jq '. as $k | .e + { h: "i" } | $k + .'
{
"e": {
"f": "g"
},
"f": "g",
"h": "i"
}
echo '{ "e": { "f": "g" } }' | jq '. as $k | .e + { h: "i" } | $k + .e'
{
"e": {
"f": "g"
}
}

期望输出:

{
"e": {
"f": "g",
"h": "i"
}
}

有人能告诉我我的错误吗?

如果您的意图只是将元素附加到对象,那么最好使用+=作为

jq '.e += { "h" : "i" }'

在行动中,

echo '{ "e": { "f": "g" } }' | jq '.e += { "h" : "i" }'
{
"e": {
"f": "g",
"h": "i"
}
}

相关内容

最新更新