Java 使用GSON解析整个AWS SQS记录
我一直在尝试解析此消息,但未成功。使用AWS简单队列服务API,我按照说明执行以下操作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
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;
}