我在用JQ Play.

这是我的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同名.

所以我不能形成这样的JQ,不会获取匹配的记录与primarykey在体内.

我的预期yields 是-

{
  "parameters": {
    "db_number": ""
  },
  "body": {
    "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"
  }
}

请帮助我正确的JQ,可以在jqplay.org中运行

推荐答案

稍加修改,可以写成如下.关键是重复使用变量$k一次,以形成键名,然后将其从成员中排除.

.body.primarykey[] as $k | 
{ 
  parameters: {($k): "" }, 
  body: (.body.members | map(select(.name != $k) | {(.name): .type | ascii_downcase}) | add)
}

Jqplay-https://jqplay.org/s/hdTpOhvZ0I2

Json相关问答推荐

JOLT拉平数组

使用单元和非单元版本反序列化Rust中的枚举,而无需编写自定义反序列化程序

无法从JSON解析ZonedDateTime,但可以使用格式化程序很好地解析

Jolt:数组中两个字符串的连接

使用 JSON 和相对日期设置日历视图中 SharePoint 列表项的背景 colored颜色 格式

如何将属性拆分为嵌套的JSON内容?

Jolt 不打印任何东西

无法在Kotlin 中解析JSONObject

如何在 Android Studio 中将 List 字段作为空列表[]返回?

Nifi - 忽略(或删除)JSON 的第一个数字

如何实现一个通用的 serde_json::from_str

根据数据框中的其他列值将列表 json 对象插入行

使用 JQ 从文件中删除重复的 JSON 块

使用 jq 同时迭代数组

应该使用什么标头将 GZIP 压缩 JSON 从 Android 客户端发送到服务器?

Flask 请求和 application/json 内容类型

我可以使用空字符串作为对象标识符吗?

通过url获取json数据并在python中使用(simplejson)

我如何反序列化以杰克逊为单位的时间戳?

如何在 postgresql 9.3 中循环 JSON 数组