用jq添加JSON对象时如何防止转义?

保罗

我正在使用jq,正在尝试将新的JSON对象添加到现有文件的新密钥中。

我有以下JSON文件foob​​arbaz.json

{
    "example":{
        "name": "stackOverflowQuestion"
    }
}

我想在示例下添加一个新条目,以便在foob​​ar.json中获得以下输出

{
    "example": {
        "name": "stackOverflowQuestion",
        "new": {
            "newfield": {
                "key": "value"
            }
        }
    }
}

我在终端中使用以下命令:

$ tempvar='{"newfield":{"key":"value"}}'
$ cat foobarbaz.json | jq '.example.new=env.tempvar' > foobar.json

但是,foob​​ar.json中的输出有些出乎意料:

{
  "example": {
    "name": "stackOverflowQuestion",
    "new": "{\"newfield\":{\"key\":\"value\"}}"
  }
}

为什么jq用大括号将大括号括起来,为什么会转义双引号呢?

查尔斯·达菲

通过fromjson将其解码为JSON内容,用于将您的字符串(所有环境变量都在其中的格式!)转换为相应的数据结构。

tempvar='{"newfield":{"key":"value"}}' jq '.example.new=(env.tempvar | fromjson)' <<'EOF'
{
    "example":{
        "name": "stackOverflowQuestion"
    }
}
EOF

...作为输出发出:

{
  "example": {
    "name": "stackOverflowQuestion",
    "new": {
      "newfield": {
        "key": "value"
      }
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章