向树添加字段非常简单:
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"
}
}
有人可以告诉我我的方法有哪些错误吗?
最佳答案
如果您的目的只是将元素附加到对象,那么最好使用 +=
as
jq '.e += { "h" : "i" }'
在行动中,
echo '{ "e": { "f": "g" } }' | jq '.e += { "h" : "i" }'
{
"e": {
"f": "g",
"h": "i"
}
}
关于arrays - JQ 如何向完整树添加节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51379550/