簡體   English   中英

使用Jackson將json字符串轉換為通用Map

[英]Converting json string to generic Map using Jackson

我從其他服務獲取以下對象,我需要將其解析為服務中擁有的POJO。 傳入的對象看起來像:AddressMessage.java

public class AddressMessage {

    @NotEmpty
    @JsonProperty("id")
    private String id;

    @NotEmpty
    @JsonProperty("address")
    private String address;

    public String getId() {
        return this.id;
    }

    public String getAddress() {
        return this.address;
    }

    @SuppressWarnings("unchecked")
    @JsonProperty("data")
    public void unpackNested(Map<String, Object> rawMessage) {
        Map<String, String> data = (Map<String, String>) rawMessage.get("data");
        this.id = (String) data.get("id");
        this.address = (String) data.get("address");
    }
}

傳入的數據如下所示:

{“data”: { “id” : “sampleId”, “address”: “sampleAddress” }}

我已經嘗試將傳入的json字符串解析為一個普通的Object,但這沒有用:

private void publishMessage(String rawMessage, AMQP.BasicProperties props) throws IOException {
        Object json = objectMapper.readValue(rawMessage, Object.class);
        log.debug(objectMapper.writeValueAsString(json));

我還嘗試接受原始消息,並使用對象映射器將其直接映射到類,如下所示:

private void publishMessage(String rawMessage, AMQP.BasicProperties props) throws IOException {
   AddressMessage addressMessage = objectMapper.readValue(rawMessage, 
   AddressMessage.class);
}

以上代碼的異常:

Unexpected character ('“' (code 8220 / 0x201c)): was expecting double-quote to start field name

我想從對象中提取“ id”和“ address”屬性,但由於解析錯誤,我一直遇到異常。 一些指導將不勝感激,謝謝!

另外:我目前不使用“ unpackNested”方法,但我認為我會把它扔在那里,以防引發任何想法

您可以在像這樣的構造函數上使用@JsonCreator批注:

@JsonCreator
public AddressMessage(@JsonProperty("data") Map<String, Object> rawJson) {
    this.id = rawJson.get("id").toString();
    this.address = rawJson.get("address").toString();
}

這告訴傑克遜在反序列化時使用該構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM