### 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?



import contextlib
import json
import logging
import queue
import random
import time
from io import BytesIO
from operator import itemgetter
import pytest
import requests
import xmltodict
from botocore.exceptions import ClientError
from pytest_httpserver import HTTPServer
from werkzeug import Response
from localstack import config
from localstack.aws.accounts import get_aws_account_id
from localstack.aws.api.lambda_ import Runtime
from localstack.constants import (
    SECONDARY_TEST_AWS_ACCESS_KEY_ID,
    SECONDARY_TEST_AWS_SECRET_ACCESS_KEY,
    TEST_AWS_ACCOUNT_ID,
    TEST_AWS_REGION_NAME,
)
from localstack.services.sns.constants import PLATFORM_ENDPOINT_MSGS_ENDPOINT