【问题标题】:jq - delete parent without deleting childrenjq - 删除父级而不删除子级
【发布时间】:2020-02-05 15:55:20
【问题描述】:

假设input.json 是:

{
    "useless": "stuff",
    "deleteMe": [
        {
            "foo": "bar",
            "baz": "fizz"
        }
    ]
}

我希望它看起来像

{
    "foo": "bar",
    "baz": "fizz"
}

换句话说,我想删除父级但保留子级。我看到了很多关于jq 'del()' 的信息,但这似乎在我的测试中也删除了孩子。如果我知道子元素的所有名称,我可以将它们提取到一个新对象中,但是键列表会有所不同,所以我希望采用更全局的方法。如何删除除孩子之外的所有内容?

【问题讨论】:

  • 在我看来,您正在寻找.deleteMe[] (try it here)。你只需要一个数组的路径来提取它的内容。
  • @Aaron 哦...是的,我想我可以这样做,然后将其读回文件中。如果您想要代表,请随意写一个答案!
  • 实际上,当使用del() 时,您将不得不回写文件,jq 目前不进行就地编辑(有关该主题的讨论和进展,请参阅this issue ; 并注意需要使用临时/工作文件而不是直接写回输入文件)。老实说,那里没有太多答案,感谢代表的提议,但我会通过:)

标签: jq


【解决方案1】:

一种可能的解决方案是将 jq 与 sponge 结合使用,例如

< input.json jq '.deleteMe[0]' | sponge input.json

还有其他几个非常合理的解决方案,部分取决于详细要求,例如

< input.json jq '.deleteMe[]' > input.tmp && mv input.tmp input.json

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多