arrays - JQ 如何向完整树添加节点

标签 arrays json variables iteration 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"
  }
}

有人可以告诉我我的方法有哪些错误吗?

最佳答案

如果您的目的只是将元素附加到对象,那么最好使用 += 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/

相关文章:

javascript - Angular 在 orderBy 之后获取中间索引

javascript - 如何将数组写入的字符串转换为真正的数组?

php - 使用动态路径访问数组

javascript - 如何处理 json

java - 如何将对象列表转换为 JSON 对象?

Android & Facebook SDK : decoding pictures from/me/picture graph call

javascript - Cookie 仅在不使用 JSON.stringify 时设置

php - jquery - 查找具有特定类的最后一个元素并将其传递给 php?

php - 将 JavaScript 变量发送到 PHP 变量

javascript - 根据文本框中输入的文本设置变量