the*_*ide 4 bash json count missing-data jq
以下是调用API时返回的示例输出:
curl "https://mywebsite.com/api/cars.json&page=1" | jq '.'
Run Code Online (Sandbox Code Playgroud)
使用jq,将如何计算数字或记录charge缺少密钥的位置?我知道代码的第一位将包括在内,jq '. | length'但是如何过滤掉包含或不包含某个键值的对象?
如果应用于以下示例,则输出为 1
{
"current_page": 1,
"items": [
{
"id": 1,
"name": "vehicleA",
"state": "available",
"charge": 100
},
{
"id": 2,
"name": "vehicleB",
"state": "available",
},
{
"id": 3,
"name": "vehicleB",
"state": "available",
"charge": 50
}
]
}
Run Code Online (Sandbox Code Playgroud)
.items | map(select(.charge == null)) | length
Run Code Online (Sandbox Code Playgroud)
这是使用的更有效的解决方案reduce:
reduce (.items[] | select(.charge == null)) as $i (0;.+=1)
Run Code Online (Sandbox Code Playgroud)
样本运行(假设中包含已更正的JSON数据data.json)
$ jq -M 'reduce (.items[] | select(.charge == null)) as $i (0;.+=1)' data.json
1
Run Code Online (Sandbox Code Playgroud)
请注意,上述各项均采用次要的快捷方式,前提是这些项目没有"charge":null成员。如果某些物品可以null收费,则测试== null不会区分那些物品和没有charge钥匙的物品。如果这是一个令人担忧的问题,has则最好使用以下形式的上述过滤器:
.items | map(select(has("charge")|not)) | length
reduce (.items[] | select(has("charge")|not)) as $i (0;.+=1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1554 次 |
| 最近记录: |