json - jq:删除具有空字符串值的键
问题描述
我有以下 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]$"; "")))'
推荐阅读
- c++ - 输入值后如何在一个括号下显示值,例如“{6,7,8,9}
- reactjs - React Loadable SSR 并不总是给客户端完整的包列表,导致页面闪烁
- java - 为什么以下字符串显示 JSONException?
- postgresql - 即使 PostgreSQL RDS 暴露在互联网上,如何使用本地子网连接到 RDS 以避免延迟
- javascript - 如何实时显示我的数据库(Php、js、jquery、AJAX)
- uwp - 项目“AppUIBasics”需要部署才能启动
- php - PHP文件上传无法从临时移动文件
- awk - 仅当列在文件中具有某些值时才保留行
- cs-cart - 如何在 cs 购物车的订单发票产品表片段中添加新变量?
- macos - 模拟网络延迟 mac Sierra