使用jq解析嵌套JSON,筛选GCP非默认配额限制
解决GCP配额JSON解析:筛选非默认值的Quota Limits
正确的jq表达式
[ .[] | .quota = [.quota[] | select(tonumber(.defaultLimit) != tonumber(.effectiveLimit))] | select(.quota | length > 0) ]
原表达式问题分析
你之前的表达式逻辑错误:.quota[].defaultLimit|tonumber != .quota[].effectiveLimit|tonumber 会将所有quota项的defaultLimit和effectiveLimit分别展开为数字数组,再进行整体比较,而非针对单个quota对象逐一判断两者是否不等。这种写法会导致筛选逻辑混乱,无法得到预期结果。
表达式拆解
- 遍历顶层数组:
.[]逐个处理每个metric对象 - 筛选目标quota项:
[.quota[] | select(tonumber(.defaultLimit) != tonumber(.effectiveLimit))]遍历当前对象的quota数组,只保留defaultLimit与effectiveLimit数值不等的项,并用数组包裹结果 - 过滤空结果:
select(.quota | length > 0)只保留那些筛选后quota数组不为空的metric对象,避免输出无有效配额变更的条目
验证结果
将示例JSON输入上述jq表达式,会输出你期望的结果:
[ { "metric": "compute.googleapis.com/a2_cpus", "quota": [ { "defaultLimit": "12", "dimensions": { "region": "asia-east1" }, "effectiveLimit": "13" } ] } ]
内容的提问来源于stack exchange,提问作者Python Beginner
相关产品推荐
相关产品推荐

