### Is there an existing issue for this?

- [X] I have searched the existing issues

### Feature description

I would like to request extending `sns_listener` with an ability to understand `email-json` next to `email` protocol.

### 🧑‍💻 Implementation

1. check if protocol is `email` or `email-json`
2. for email json interpret body/message as json

### Anything else?

_No response_
return _get_tags(topic_arn)
def do_tag_resource(topic_arn, tags):
    sns_backend = SNSBackend.get()
    existing_tags = sns_backend.sns_tags.get(topic_arn, [])
    tags = [tag for idx, tag in enumerate(tags) if tag not in tags[:idx]]
    def existing_tag_index(item):
        for idx, tag in enumerate(existing_tags):
            if item["Key"] == tag["Key"]:
                return idx
        return None
    for item in tags:
        existing_index = existing_tag_index(item)
        if existing_index is None:
            existing_tags.append(item)
        else:
            existing_tags[existing_index] = item
    sns_backend.sns_tags[topic_arn] = existing_tags
def do_untag_resource(topic_arn, tag_keys):
    sns_backend = SNSBackend.get()
    sns_backend.sns_tags[topic_arn] = [t for t in _get_tags(topic_arn) if t["Key"] not in tag_keys]
def get_subscription_by_arn(sub_arn):
    sns_backend = SNSBackend.get()
    
    for key, subscriptions in sns_backend.sns_subscriptions.items():
        for sub in subscriptions:
            if sub["SubscriptionArn"] == sub_arn:
                return sub
def make_response(op_name, content="", message_id=None):