jq:删除具有空字符串值的键

2024-04-28

我有以下 JSON:

{
  "data": [
    {
      "{#NAME}": "Test 1",
      "{#ID}": "1",
      "{#IP}": "192.168.1.2:80"
    },
    {
      "{#NAME}": "Test 2",
      "{#ID}": "2",
      "{#IP}": ""
    },
    {
      "{#NAME}": "Test 3",
      "{#ID}": "3",
      "{#IP}": "192.168.1.3:80"
    },
    {
      "{#NAME}": "Test 4",
      "{#ID}": "4",
      "{#IP}": "192.168.1.4:80"
    },
    {
      "{#NAME}": "Test 5",
      "{#ID}": "5",
      "{#IP}": ""
    }
  ]
}

但我想返回:

{
  "data": [
    {
      "{#NAME}": "Test 1",
      "{#ID}": "1",
      "{#IP}": "192.168.1.2"
    },
    {
      "{#NAME}": "Test 2",
      "{#ID}": "2",
    },
    {
      "{#NAME}": "Test 3",
      "{#ID}": "3",
      "{#IP}": "192.168.1.3"
    },
    {
      "{#NAME}": "Test 4",
      "{#ID}": "4",
      "{#IP}": "192.168.1.4"
    },
    {
      "{#NAME}": "Test 5",
      "{#ID}": "5",
    }
  ]
}

我对使用 JQ 很陌生,不知道如何才能做到这一点。我读过这篇文章GitHub 上的问题页面 https://github.com/stedolan/jq/issues/104但这些例子似乎都不适合我。

我还需要删除端口号和冒号。那可能吗?


您可以执行以下操作,选择不是的值empty using with_entries(expr),与expr是排除空字段的条件。

还可以使用.value再次键入字段以删除与包含端口字符串的正则表达式匹配的字符串。

jq '.data |= map(with_entries(select(.value != "") | .value |= sub(":[0-9][0-9]$"; "")))'

jqplay - 在线演示 https://jqplay.org/s/IPIqtH9fDR

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jq:删除具有空字符串值的键 的相关文章

随机推荐