[英]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]$"; "")))'
刪除所有以""
結尾的行:
sed -r '/""$/d' test.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.