使用jq无法选择以数字开头的字段,求可行解决方案
解决jq无法选择以数字开头字段的问题
这个问题其实是jq的标识符规则导致的——jq里直接用.字段名的语法只支持符合标识符规范的字段名(不能以数字开头),所以像你数据里的90line、95line这类字段,直接写.90line肯定会报错。
下面给你两种通用的解决方法,在jqplay里也能直接生效:
方法1:用引号包裹字段名访问
把数字开头的字段名用双引号包起来,配合.或者方括号语法就能正常访问:
比如要提取result数组中每个对象的90line字段,可以写:
.result[]."90line"
或者用方括号的写法(效果完全一样):
.result[]|["90line"]
如果要同时提取多个字段(包括正常命名和数字开头的),可以这样组合:
.result[] | {labelName, "90line", "95line", "99line"}
运行后会输出每个对象对应的labelName和三个百分位响应时间字段。
方法2:批量筛选数字开头的字段
如果需要一次性提取所有以数字开头的字段,可以结合with_entries和正则筛选:
.result[] | with_entries(select(.key | test("^\\d")))
这个命令会把每个result对象里所有以数字开头的键值对单独筛选出来,不用一个个指定字段名。
关于你提到的部分方案在jqplay不生效的说明
有些旧的issue方案可能依赖特定版本的jq特性,jqplay里的jq版本如果偏旧可能不支持。但上面两种方法是jq的基础语法,几乎所有版本都兼容,你可以直接在jqplay里测试。
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

