【问题标题】:JSON delete specific keys from nested objects without knowing key namesJSON 在不知道键名的情况下从嵌套对象中删除特定键
【发布时间】:2021-12-11 08:45:38
【问题描述】:

我有一个 json 文件,想删除一些我不需要的子键。这是 JSON 文件的一部分:

{
  "peers":{
    "swp1":{
      "hostname":"Spine-01",
      "remoteAs":65001,
      "version":4,
      "msgRcvd":452,
      "msgSent":459,
      "tableVersion":0,
      "outq":0,
      "inq":0,
      "peerUptime":"00:19:15",
      "peerUptimeMsec":1155000,
      "peerUptimeEstablishedEpoch":1635674862,
      "prefixReceivedCount":30,
      "pfxRcd":30,
      "pfxSnt":43,
      "state":"Established",
      "idType":"interface"
    },
    "swp2":{
      "hostname":"Spine-02",
      "remoteAs":65001,
      "version":4,
      "msgRcvd":452,
      "msgSent":459,
      "tableVersion":0,
      "outq":0,
      "inq":0,
      "peerUptime":"00:19:14",
      "peerUptimeMsec":1154000,
      "peerUptimeEstablishedEpoch":1635674863,
      "prefixReceivedCount":30,
      "pfxRcd":30,
      "pfxSnt":43,
      "state":"Established",
      "idType":"interface"
    }
  }
}

例如,我想删除“版本”子键,我已经尝试过这个命令

del(.peers.swp1.version, .peers.swp2.version)

而且效果很好。但问题是,“swp1”和“swp2”是接口,可以更改名称,增加或减少。因此,无论接口名称是什么,我都需要一个可以删除“版本”子键的命令。

【问题讨论】:

    标签: json jq


    【解决方案1】:

    您只需要map_valuesdel

    .peers |= map_values(del(.version))
    

    jqplay中的演示

    【讨论】:

    • 谢谢!!!你刚刚拯救了我的一天!
    • @Chloe:点击回答旁边的勾号以标记帖子已解决,如果您觉得有用,请点赞^答案
    • 好的!如果你不介意,我还有一个问题……我还有其他键(“peers”除外),例如“name”、“id”和“memory”。我想删除键“内存”,此时我仍在使用命令 del(.memory) 所以必须运行两个命令(以及你建议的那个)。有没有办法让我只用一个命令就可以运行它?
    • @Chloe Stackoverflow 不鼓励在接受答案后对同一个帖子提出后续问题。请用您的正确输入和预期输出提出一个新问题
    【解决方案2】:

    你也可以使用这个语法:

    del(.peers[].version)|del(.memory)
    

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 1970-01-01
      • 2021-06-28
      • 2019-10-14
      • 1970-01-01
      • 2011-07-04
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多