如何形成正确的 JQ 表达式以从 JSON 文件获取准确的输出数据?

问题描述 投票:0回答:1

我正在使用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"
}
}

在这里,我的要求是 - 我想从输出主体中删除记录/字段:{},它与主键具有相同的名称。

所以我无法形成这样的 JQ,不会在主体内获取与主键匹配的记录。

我的预期输出是-

{
"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"
}
}

请帮助我找到可以在 jqplay.org 中使用的正确 JQ

json jq
1个回答
0
投票

稍加改造,可以写成

.body.primarykey[] as $k | 
{ parameters: ({($k): "" }), 
  body: (.body.members | map(select(.name != $k) | {(.name): .type |ascii_downcase}) | add)
}
© www.soinside.com 2019 - 2024. All rights reserved.