簡體   English   中英

jq:刪除具有空字符串值的鍵

[英]jq: Remove keys with empty string values

我有以下 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 上通讀了這個問題頁面,但似乎沒有一個例子對我有用。

我還需要刪除端口號和冒號。 那可能嗎?

您可以在下面使用with_entries(expr)選擇非值, expr是排除空字段的條件。

還要再次使用.value字段來刪除與包含端口字符串的正則表達式匹配的字符串。

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

jqplay - 在線演示

刪除所有以""結尾的行:

sed -r '/""$/d' test.json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM