Apache Velocity: 如何从json中删除key/value?

4

我有一个JSON

{
    "Id": "xxx",
    "Type": "Transaction.Create",
    "Payload": {
        "result": 2,
        "description": "Pending",
        "body": {
            "redirect": {
                "url": "xxx",
                "fields": {
                    "MD": "8a829449620619e80162252adeb66a39"
                }
            },
            "card": {
                "expiryMonth": "1",
                "expiryYear": "2033"
            },
            "order": {
                "amount": 1
            }
        }
    }
}

我希望您能帮我移除它的卡信息,如下所示:
{
    "Id": "xxx",
    "Type": "Transaction.Create",
    "Payload": {
        "result": 2,
        "description": "Pending",
        "body": {
            "redirect": {
                "url": "xxx",
                "fields": {
                    "MD": "8a829449620619e80162252adeb66a39"
                }
            },
            "order": {
                "amount": 1
            }
        }
    }
}

我该如何使用Apache Velocity实现这个?

目前有效的方法是:

#set($content = $util.urlEncode($input.json('$')))
#set($new = $content.replaceAll("2033","2055"))
Action=SendMessage&MessageBody={"body": "$new","Event-Signature": "$util.urlEncode($input.params('Event-Signature'))"}

这让我...
{
    "Id": "xxx",
    "Type": "Transaction.Create",
    "Payload": {
        "result": 2,
        "description": "Pending",
        "body": {
            "redirect": {
                "url": "xxx",
                "fields": {
                    "MD": "8a829449620619e80162252adeb66a39"
                }
            },
            "card": {
                "expiryMonth": "1",
                "expiryYear": "2050"
            },
            "order": {
                "amount": 1
            }
        }
    }
}

但是现在我想删除卡片部分,但它不起作用:
#set($content = $util.urlEncode($input.json('$')))
#set($new = $content.delete("$.Payload.body.card"))
Action=SendMessage&MessageBody={"body": "$new","Event-Signature": "$util.urlEncode($input.params('Event-Signature'))"}

我做错了什么?

主要目标是将API网关中的映射模板转换为Webhook。 Webhook包含太多信息,我们想要删除JSON POST调用的某些部分。


嘿,用其他库做起来很容易,这一定是使用了Velocity吧? - BugsForBreakfast
是的,我认为我需要在AWS的API Gateway中使用映射模板来完成这个任务。如果在那里能够实现,那就很好了。https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html - DenCowboy
嘿,你解决了这个问题吗?我对apache velocity一无所知,搜索了一下,但找不到像删除或清除命令之类的东西。我想一个选项是创建或构建一个新的JSON(使用gson之类的工具)来保存这些apache velocity json的信息,但排除掉卡片,然后发送这个新的没有卡片的JSON到apache velocity中。你觉得这个可行吗? - BugsForBreakfast
1个回答

1
尝试使用以下内容。
#set($dummy=$content.Payload.remove("card"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接