使用 `sed` 从 JSON 数组中删除所有元素

Using `sed` to remove all elements from JSON array

我知道 Whosebug 不是代码编写服务,但 sed 在过去的 3 小时里一直让我发疯。

综上所述,我需要修改我拥有的 .json 文件的内容。

文件的样子:

{
// ...
    "first": {
        "second": [
            "indexZero",
            "theseStringsAreDynamic",
            "soINeedToUseWildcard"
        ]
    }
// ...
}

想要的结果:

{
// ...
    "first": {
        "second": [
        ]
    }
// ...
}

你做了什么?

我已经尝试了大约一百万种松散的变化,基于:

sed -i 's/\"second\": \[.*\]/\"second\": []/' "my.json"

## ~ Which gives: ~
#
#    "first": {
#        "second": []
#            "indexZero",
#            "theseStringsAreDynamic",
#            "soINeedToUseWildcard"
#        ]
#    },

基本上,我需要从 .json 文件中的数组中删除所有元素,因此如果 sed 不是完成这项工作的正确工具,请告诉我。

感谢您的宝贵时间。

这项工作的正确工具是 jq:

$ jq '.first.second = []' input.json
{
  "first": {
    "second": []
  }
}

要替换原始文件,需要两个步骤 - 将输出重定向到一个临时文件,然后重命名它:

jq '.first.second = []' orig.json > tmp.json && mv -f tmp.json orig.json