我有一个格式如下的JSON文件

[
    {
        "foo" : "fooValue",
        "bar" : "barValue"
    },
    {
        "foo" : null,
        "bar" : null
    }
]

我想根据键foo和bar的值的存在,将新的键值对baz添加到此JSON中。如果foo和bar都不为空,则baz应该是字符串"true"。如果foo或bar均为空或两个为null,则baz应为字符串"false"。使用JQ完成此操作的最佳方法是什么?我了解如何将钥匙值对附加到JSON,但我不确定如何有条件地执行此过程。谢谢

分析解答

使用基于.foo的布尔连词 操作员 and.bar的(in)EQUEALITY,null分配,将结果用于新的键.baz,然后使用此过滤器map输入。

map(.baz = .foo != null and .bar != null)
[
  {
    "foo": "fooValue",
    "bar": "barValue",
    "baz": true
  },
  {
    "foo": null,
    "bar": null,
    "baz": false
  }
]

demo


如果新值确实是字符串,则只需计算的布尔值:

map(.baz = "\(.foo != null and .bar != null)")
[
  {
    "foo": "fooValue",
    "bar": "barValue",
    "baz": "true"
  },
  {
    "foo": null,
    "bar": null,
    "baz": "false"
  }
]

demo