将JSON字符串反序列化为自定义Java对象

本文关键字:自定义 Java 对象 反序列化 JSON 字符串 | 更新日期: 2023-09-27 18:18:15

我有一个字符串返回给我,格式化为JSON。字符串如下所示

{ "Type" : "Notification". "MessageId" : "9343.....". "TopicArn" : "arn-....." "......" }

我已经创建了一个自定义对象,我想将这个字符串解析为

public class AmazonSNSMessage 
{
private String Type;
private String Notification;
private String MessageId;
private String TopicArn;
private String Subject;
private String Message;
private String Timestamp;
private String SignatureVersion;
private String Signature;
private String UnsubscribeURL
// And all the appropriate get/set methods
}

Java中是否有一个JSON反序列化器,它将接受字符串并创建AmazonSNSMessage的实例?

c#通过调用 这一行来实现
AmazonSNSMessage b = JsonConvert.DeserializeObject<AmazonSNSMessage>(TheString);

,理想情况下,我想要类似的东西。

将JSON字符串反序列化为自定义Java对象

Jackson可以这样做:

final ObjectMapper mapper = new ObjectMapper();
final AmazonSNSMessage message 
    = mapper.readValue(yourInput, AmazonSNSMessage.class);

它会自动工作,因为你的字段名是相同的JSON!

如果你有更复杂的场景,你可以使用注释,自定义反序列化器等

http://code.google.com/p/google-gson/

Gson是一个Java库,可用于将Java对象转换为它们的JSON表示。它还可以用于将JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。

我建议使用下一个库,

https://code.google.com/p/json-simple/

一种注释模式,正如fge所说,Jackson是一个非常强大的库,可以处理Json序列化和反序列化。它可以很好地将json键映射到POJO属性,从而使用注释获得一致的驼峰大小写代码。

public class AmazonSNSMessage 
{
    @JsonProperty("Type");
    private String type;
    @JsonProperty("Notification");
    private String notification;
    @JsonProperty("MessageId");
    private String messageId;
    @JsonProperty("TopicArn");
    private String topicArn;
    @JsonProperty("Subject");
    private String subject;
    @JsonProperty("Message");
    private String message;
    @JsonProperty("Timestamp");
    private Date timestamp;
    @JsonProperty("SignatureVersion");
    private String signatureVersion;
    @JsonProperty("Signature");
    private String signature;
    @JsonProperty("UnsuscribeUrl");
    private String unsubscribeURL
    // And all the appropriate get/set methods
}