如何编写JQ表达式移除body中与primarykey同名的字段
JQ表达式优化:移除Body中与主键同名的字段
原始JSON数据
{ "body": { "name": "DATATYPES", "primarykey": [ "db_number" ], "members": [ { "name": "db_number", "type": "NUMBER" }, { "name": "db_date", "type": "DATE" }, { "name": "db_timestamp", "type": "TIMESTAMP(6)" }, { "name": "db_timestamp_with_local_time_zone", "type": "TIMESTAMP(6) WITH LOCAL TIME ZONE" }, { "name": "db_char", "type": "CHAR" }, { "name": "db_float", "type": "FLOAT" }, { "name": "db_nchar", "type": "NCHAR" }, { "name": "db_nvarchar2", "type": "NVARCHAR2" }, { "name": "db_varchar2", "type": "VARCHAR2" }, { "name": "db_binary_float", "type": "BINARY_FLOAT" }, { "name": "db_binary_double", "type": "BINARY_DOUBLE" }, { "name": "db_timestamp_with_time_zone", "type": "TIMESTAMP(6) WITH TIME ZONE" }, { "name": "db_interval_year_to_month", "type": "INTERVAL YEAR(2) TO MONTH" }, { "name": "db_interval_day_to_second", "type": "INTERVAL DAY(2) TO SECOND(6)" }, { "name": "db_long", "type": "LONG" }, { "name": "db_blob", "type": "BLOB" }, { "name": "db_clob", "type": "CLOB" }, { "name": "db_boolean", "type": "CHAR" } ], "links": [ { "rel": "collection", "href": "https://tdcvm28s16.bcone.com:7002/ords/testords/metadata-catalog/", "mediaType": "application/json" }, { "rel": "canonical", "href": "https://tdcvm28s16.bcone.com:7002/ords/testords/metadata-catalog/datatypes/", "mediaType": "application/json" }, { "rel": "alternate", "href": "https://tdcvm28s16.bcone.com:7002/ords/testords/open-api-catalog/datatypes/", "mediaType": "application/openapi+json" }, { "rel": "describes", "href": "https://tdcvm28s16.bcone.com:7002/ords/testords/datatypes/" } ] } }
当前使用的JQ表达式
{parameters: (.body.primarykey[] | {(.): ""}), body: (.body.members | map({(.name): .type |ascii_downcase}) | add)}
当前输出结果
{ "parameters": { "db_number": "" }, "body": { "db_number": "number", "db_date": "date", "db_timestamp": "timestamp(6)", "db_timestamp_with_local_time_zone": "timestamp(6) with local time zone", "db_char": "char", "db_float": "float", "db_nchar": "nchar", "db_nvarchar2": "nvarchar2", "db_varchar2": "varchar2", "db_binary_float": "binary_float", "db_binary_double": "binary_double", "db_timestamp_with_time_zone": "timestamp(6) with time zone", "db_interval_year_to_month": "interval year(2) to month", "db_interval_day_to_second": "interval day(2) to second(6)", "db_long": "long", "db_blob": "blob", "db_clob": "clob", "db_boolean": "char" } }
需求说明
移除输出中body对象内与primarykey同名的字段(即db_number),得到不含该字段的body对象。
正确的JQ表达式
{ parameters: (.body.primarykey[] | {(.): ""}), body: (.body.members | map({(.name): .type | ascii_downcase}) | add) } | del(.body[.parameters | keys[]])
表达式说明
- 先按原有逻辑生成包含
parameters和body的基础结果 - 通过
del(.body[.parameters | keys[]])删除body中所有与parameters内键名一致的字段,适配单个或多个主键的场景
内容的提问来源于stack exchange,提问作者sujay777
相关产品推荐
相关产品推荐

