JQ语法求助:从JSON提取主键类型及过滤成员数据
解决JQ处理JSON的两个需求:主键类型转小写及生成过滤后的Body
示例输入JSON
假设你的输入JSON结构如下:
{ "members": [ { "name": "id", "type": "INT", "isPrimaryKey": true }, { "name": "username", "type": "STRING", "isPrimaryKey": false }, { "name": "email", "type": "STRING", "isPrimaryKey": false } ] }
需求说明
- 改进JQ语句,让输出的
parameters中主键字段对应的type转为小写; - 同时生成包含主键类型(已转小写)的
parameters,以及过滤掉所有主键字段的body部分。
正确JQ语句
{ parameters: .members | map( if .isPrimaryKey then {name: .name, type: .type | ascii_downcase} else {name: .name, type: .type} end ), body: .members | map(select(.isPrimaryKey == false)) | map({name: .name}) }
输出结果
执行上述语句后,会得到符合预期的输出:
{ "parameters": [ { "name": "id", "type": "int" }, { "name": "username", "type": "STRING" }, { "name": "email", "type": "STRING" } ], "body": [ { "name": "username" }, { "name": "email" } ] }
逻辑解释
- 主键类型转小写:通过
if .isPrimaryKey then ... else ... end判断当前字段是否为主键,若是则用ascii_downcase将type值转为小写; - 过滤主键生成Body:使用
select(.isPrimaryKey == false)筛选出非主键字段,再提取name字段组成body数组。
内容的提问来源于stack exchange,提问作者sujay777
相关产品推荐
相关产品推荐

