Java 使用GSON解析整个AWS SQS记录

Java 使用GSON解析整个AWS SQS记录,java,amazon-web-services,parsing,gson,amazon-sqs,Java,Amazon Web Services,Parsing,Gson,Amazon Sqs,我一直在尝试解析此消息,但未成功。使用AWS简单队列服务API,我按照说明执行以下操作 for(Message m : Messages){ System.out.println(m.getBody()); } 这将返回此结构中的JSON字符串: { "Records": [ { "EventSource": "", "EventVersion": "", "EventSubscriptio

我一直在尝试解析此消息,但未成功。使用AWS简单队列服务API,我按照说明执行以下操作

for(Message m : Messages){
    System.out.println(m.getBody());
}
这将返回此结构中的JSON字符串:

{
    "Records": [
        {
            "EventSource": "",
            "EventVersion": "",
            "EventSubscriptionArn": "",
            "Sns": {
                "Type": "",
                "MessageId": "",
                "TopicArn": "",
                "Subject": null,
                "Message": ""                
                "Timestamp": "",
                "SignatureVersion": "",
                "Signature": "”
                "SigningCertUrl": "",
                "UnsubscribeUrl": "",
                "MessageAttributes": {}
            }
        }
    ]
}
我一直在尝试使用GSON将整个内容解析为一个Java对象,这样我就可以提取“Message”参数(它也包含JSON),然后使用GSON来解析它(当我直接传递文本时完成并工作)

这些是我设置的类,但这不起作用——每个类都有公共getter和setter

档案类别:

public class Records {

    public ArrayList<ExceptionMessages> exceptionMessages = new ArrayList<ExceptionMessages>();

    public ArrayList<ExceptionMessages> getExceptionMessages() {
        return exceptionMessages;
    }

    public void setExceptionMessages(ArrayList<ExceptionMessages> exceptionMessages) {
        this.exceptionMessages = exceptionMessages;
    }
Sns类(存储消息的位置):

我在尝试获取ArrayList的
.get(0)
时遇到空指针异常,因此它是空的,并且没有进行解析

这是我怎么称呼它的

我将
m.getBody()
发送到一个解析方法,并尝试如下解析:

Gson gson = new Gson();
Records record = new Records();
gson.fromJson(JSONString.replaceAll("\\s+", ""), Records.class);

结构应该是

class RecordContainer {
    ArrayList<Record> Records;
}

class Record {
    public String EventSource;
    public String EventVersion;
    public String EventSubscriptionArn;
    public Sns Sns;     
}

class Sns {
    public String Type;
    public String MessageId;
    public String TopicArn;
    public String Subject;
    public String Message;
    public String Timestamp;
    public String SignatureVersion;
    public String Signature;
    public String SigningCertUrl;
    public String UnsubscribeUrl;
    public MessageAttributes MessageAttributes;
}
类记录容器{
ArrayList记录;
}
课堂记录{
公共字符串事件源;
公共字符串事件版本;
公共字符串EventSubscriptionArn;
公共社交网站;
}
类Sns{
公共字符串类型;
公共字符串MessageId;
公共字符串主题词;
公共字符串主题;
公共字符串消息;
公共字符串时间戳;
公共字符串签名转换;
公共字符串签名;
公共字符串签名CertURL;
公共字符串取消订阅URL;
公共消息属性;
}

Hint:JSON中是否出现过短语
exceptionMessages
?在你的代码中,名为
的字段Records
在哪里?以及
messageJSON
Sns
的区别(在JSON中出现)?您似乎理解应该根据JSON中的名称来命名字段,但是中途忘记它并发明新名称。。看起来记录是一个OJBECT数组。。我不确定该如何调用对象类(这就是为什么我刚才称它为Exception类)。。messageJSON是记录类中Sns对象的名称。这是一个嵌套对象。。对的我已经更新了帖子以显示实际的Gson呼叫。当然!!!记录类来保存记录。。。我不知道为什么我没有看到这个。今天早上我戴着眼罩。我真的很感谢你的帮助。这简直让我疯了!对于
MessageAttributes
为什么这里定义了
MessageAttributes
类型?
Gson gson = new Gson();
Records record = new Records();
gson.fromJson(JSONString.replaceAll("\\s+", ""), Records.class);
class RecordContainer {
    ArrayList<Record> Records;
}

class Record {
    public String EventSource;
    public String EventVersion;
    public String EventSubscriptionArn;
    public Sns Sns;     
}

class Sns {
    public String Type;
    public String MessageId;
    public String TopicArn;
    public String Subject;
    public String Message;
    public String Timestamp;
    public String SignatureVersion;
    public String Signature;
    public String SigningCertUrl;
    public String UnsubscribeUrl;
    public MessageAttributes MessageAttributes;
}