在 Bash 中操作 JSON

在 Bash 中操作 JSON

我有一个 JSON 文件,我需要更新特定值。

{
  "Comment": "comment",
  "test": {
    "enabled": true
  },
  "enabled": true,
  "otherStuff": blah,
  "otherStuff2": blah,
  "otherStuff3": blah,
}

我想将第二个“enabled”的值更改为 false。使用 JQ Parser,我可以轻松地使用以下命令检索它jq '.已启用',但我不确定操作 JSON 的最佳方法是什么。

JSON 是我从 API 获得的响应,将来可能会发生变化,我不能依赖之前/之后的行或值。

答案1

一个快速实验:

$ echo '{
  "Comment": "comment",
  "test": {
    "enabled": true
   },
  "enabled": true,
  "otherStuff": "blah",
  "otherStuff2": "blah",
  "otherStuff3": "blah"
}' |
jq '.enabled=false'
{
  "otherStuff3": "blah",
  "otherStuff2": "blah",
  "otherStuff": "blah",
  "enabled": false,
  "test": {
    "enabled": true
  },
  "Comment": "comment"
}

答案2

我把这个问题理解为“在壳里”,而不一定是“仅使用 bash 内置命令”。

尝试杰萨克,它允许操作并且可以编写脚本,但它依赖于 js 作为依赖项。

如果你只想从 JSON 响应中读取一个(唯一)键,你可以(改编自布伦丹·奥康纳):

curl <destination> | grep -Po '"keyname":.*?[^\\]",'`

相关内容