### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

Messages containing a MessageStructure set to "json" are not delivered to SQS when these are published on SNS using 'publish-batch'

### Expected Behavior

Messages do make it to SQS.


### How are you starting LocalStack?

With a docker-compose file

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

    docker run localstack/localstack

#### Client commands (e.g., AWS SDK code snippet, or sequence of "awslocal" commands)

##### Creating SNS toppic/SQS queue/subscription

```
$ ./awslocal sns create-topic --name 'my-sns-topic'
{
    "TopicArn": "arn:aws:sns:us-east-1:000000000000:my-sns-topic"
}
```

```
$ ./awslocal sqs create-queue --queue-name 'my-sqs-queue'
{
    "QueueUrl": "http://localhost:4566/000000000000/my-sqs-queue"
}
```

```
$ ./awslocal sqs get-queue-attributes --queue-url "http://localhost:4566/000000000000/my-sqs-queue" --attribute-names QueueArn
{
    "Attributes": {
        "QueueArn": "arn:aws:sqs:us-east-1:000000000000:my-sqs-queue"
    }
}
```

```
$ ./awslocal sns subscribe --topic-arn "arn:aws:sns:us-east-1:000000000000:my-sns-topic" --protocol sqs --notification-endpoint "arn:aws:sqs:us-east-1:000000000000:my-sqs-queue"
{
    "SubscriptionArn": "arn:aws:sns:us-east-1:000000000000:my-sns-topic:2e8368a4-b3b3-4106-abc7-84a22eeb69af"
}
```

##### Verify using 'publish'

```
$ ./awslocal sns publish --topic-arn "arn:aws:sns:us-east-1:000000000000:my-sns-topic" --message-structure 'JSON' --message '{"default": "default message", "sqs": "sqs message"}'
{
    "MessageId": "e5bc1165-51bb-4710-9e65-eed1516ce229"
}
```

```
$ ./awslocal sqs receive-message --queue-url "http://localhost:4566/000000000000/my-sqs-queue"
{
    "Messages": [
        {
            "MessageId": "b997e242-687b-4a2e-befb-d2dd8169f80c",
            "ReceiptHandle": "ZGM5YTAyY2UtYWI5ZC00ZDg5LWFjOTMtYzk2NmFkYmNiY2NlIGFybjphd3M6c3FzOnVzLWVhc3QtMTowMDAwMDAwMDAwMDA6bXktc3FzLXF1ZXVlIGI5OTdlMjQyLTY4N2ItNGEyZS1iZWZiLWQyZGQ4MTY5ZjgwYyAxNjg2NTc5MDAxLjk0MDQ2MTQ=",
            "MD5OfBody": "32fc7c66865504d74e50c8c646ad1156",
            "Body": "{\"Type\": \"Notification\", \"MessageId\": \"2057f9f0-b8b9-4fb2-80c4-0dd6cf3e2dd2\", \"TopicArn\": \"arn:aws:sns:us-east-1:000000000000:my-sns-topic\", \"Message\": \"sqs message\", \"Timestamp\": \"2023-06-12T14:09:57.879Z\", \"SignatureVersion\": \"1\", \"Signature\": \"EXAMPLEpH+..\", \"SigningCertURL\": \"https://sns.us-east-1.amazonaws.com/SimpleNotificationService-0000000000000000000000.pem\", \"UnsubscribeURL\": \"http://localhost:4566/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:000000000000:my-sns-topic:2e8368a4-b3b3-4106-abc7-84a22eeb69af\"}"
        }
    ]
}
```

The SQS message contains "sqs message" as message. This is the expected result so that's good.

##### Verify 'publish-batch' (without MessageStructure)

```
$ ./awslocal sns publish-batch --topic-arn "arn:aws:sns:us-east-1:000000000000:my-sns-topic" --publish-batch-request-entries '[{"Id": "1", "Message": "sqs batch 1"}]'
{
    "Successful": [
        {
            "Id": "1",
            "MessageId": "bf04ebfa-193d-42f1-afe6-aadf3fb9d314"
        }
    ],
    "Failed": []
}
```

```
./awslocal sqs receive-message --queue-url "http://localhost:4566/000000000000/my-sqs-queue"
{
    "Messages": [
        {
            "MessageId": "54036176-ee15-4426-a571-295a5d5f6657",
            "ReceiptHandle": "ZGJkMjBmOWMtZmQ2Mi00YTMwLTk5YTktNzNkY2M4YjFlNmU1IGFybjphd3M6c3FzOnVzLWVhc3QtMTowMDAwMDAwMDAwMDA6bXktc3FzLXF1ZXVlIDU0MDM2MTc2LWVlMTUtNDQyNi1hNTcxLTI5NWE1ZDVmNjY1NyAxNjg2NTc5Mjc1LjQ1MzExNw==",
            "MD5OfBody": "1bc38fc8c7d7a7a480784f4ea1bb37f3",
            "Body": "{\"Type\": \"Notification\", \"MessageId\": \"bf04ebfa-193d-42f1-afe6-aadf3fb9d314\", \"TopicArn\": \"arn:aws:sns:us-east-1:000000000000:my-sns-topic\", \"Message\": \"sqs batch 1\", \"Timestamp\": \"2023-06-12T14:14:30.161Z\", \"SignatureVersion\": \"1\", \"Signature\": \"EXAMPLEpH+..\", \"SigningCertURL\": \"https://sns.us-east-1.amazonaws.com/SimpleNotificationService-0000000000000000000000.pem\", \"UnsubscribeURL\": \"http://localhost:4566/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-east-1:000000000000:my-sns-topic:2e8368a4-b3b3-4106-abc7-84a22eeb69af\"}"
        }
    ]
}
```

The SQS message contains "sqs  batch 1" as message. This is the expected result so that's good.

##### Verify 'publish-batch' (with MessageStructure)

```
$ ./awslocal sns publish-batch --topic-arn "arn:aws:sns:us-east-1:000000000000:my-sns-topic" --publish-batch-request-entries '[{"Id": "1", "MessageStructure": "json", "Message": "{\"default\": \"default batch 2\", \"sqs\": \"sqs batch 2\"}"}]'
{
    "Successful": [
        {
            "Id": "1",
            "MessageId": "29b26566-79a8-40eb-8abc-37fd42232dcc"
        }
    ],
    "Failed": []
}
```

```
$ ./awslocal sqs receive-message --queue-url "http://localhost:4566/000000000000/my-sqs-queue"
```

There are no messages on the queue.
This is **unexpected**.
The **expected** result is a message with content "sqs batch 2".



### Environment

```markdown
- OS: Debian
- LocalStack:
  - LocalStack version: 2.1.1.dev
  - LocalStack build date: 2023-06-10
  - LocalStack build git hash: 710f950c
```


### Anything else?

### Relevant logging

```
DEBUG --- [   asgi_gw_2] l.services.sns.publisher   : Topic 'arn:aws:sns:us-east-1:000000000000:my-sns-topic' batch publishing 1 messages to subscribed 'arn:aws:sqs:us-east-1:000000000000:my-sqs-queue' with protocol 'sqs' (subscription 'arn:aws:sns:us-east-1:000000000000:my-sns-topic:2e8368a4-b3b3-4106-abc7-84a22eeb69af')
INFO --- [   asgi_gw_2] localstack.request.aws     : AWS sns.PublishBatch => 200
```

It shows that the SNS publish-batch succeeded and then it attempted to deliver to SQS.
There are **no messages** about the actual delivery to SQS and/or no failure logged.
I.e. it doesn't log the result of the `AWS sqs.SendMessageBatch` call (which it does do in the other cases)


### Debugging

In SqsBatchTopicPublisher the "self.prepare_message(message_ctx, subscriber)" call fails.
It throws an exception but it appears this isn't logged, adding a try except around the for loop in SqsBatchTopicPublisher::_publish and resending the message:

```
Traceback (most recent call last):
  File "/opt/code/localstack/localstack/services/sns/publisher.py", line 318, in _publish
    message_body = self.prepare_message(message_ctx, subscriber)
  File "/opt/code/localstack/localstack/services/sns/publisher.py", line 108, in prepare_message
    return create_sns_message_body(message_context, subscriber)
  File "/opt/code/localstack/localstack/services/sns/publisher.py", line 777, in create_sns_message_body
    message_content = message_context.message_content(protocol)
  File "/opt/code/localstack/localstack/services/sns/models.py", line 71, in message_content
    return self.message.get(protocol, self.message.get("default"))
AttributeError: 'str' object has no attribute 'get'
```

Adding some logging in the 'create_sns_message_body' function:
```
message_context=SnsMessage(type='Notification', message='{"default": "default batch 2", "sqs": "sqs batch 2"}', message_attributes={}, message_structure='json', subject=None, message_deduplication_id=None, message_group_id=None, token=None, message_id='29b26566-79a8-40eb-8abc-37fd42232dcc', is_fifo=False, sequencer_number=None)
```
The `message_context.message` is a string (JSON) but the code appears to expect a dictionary?



self, sns_create_topic, sqs_create_queue, sns_create_s, snapshot, aws_client
    ):
        topic_arn = sns_create_topic()["TopicArn"]
        queue_url = sqs_create_queue()
        rs = aws_client.sns.publish(
            TopicArn=topic_arn, Subject="test-subject-before-sub", Message="test_message_before"
        )
        snapshot.match("publish-before-subscribing", rs)
        sns_create_s(topic_arn=topic_arn, queue_url=queue_url)
        message_subject = "test-subject-after-sub"
        message_body = "test_message_after"
        rs = aws_client.sns.publish(
            TopicArn=topic_arn, Subject=message_subject, Message=message_body
        )
        snapshot.match("publish-after-subscribing", rs)
        response = aws_client.sqs.receive_message(
            QueueUrl=queue_url, VisibilityTimeout=0, WaitTimeSeconds=5
        )
        # n
        snapshot.match("receive-messages", response)
    @pytest.mark.aws_validated
    def test_create_duplicate_topic_with_more_tags(self, sns_create_topic, snapshot, aws_client):