簡體   English   中英

java傑克遜反序列化與不同類型的嵌套對象

[英]java jackson deserialization with different type of nested objects

我有下面的json字段。 如何將其反序列化為String,String Map?

s:{
    "g":0.0,
    "p":0.0,
    "m":0.0,
    "media":{
        "1":{"key":0,"value":0},
        "2":{"key":0,"value":0},
        "3":{"key":0,"value":0},
        "4":{"key":0,"value":0},
        ...},
    "pr":{
        "1":{"key":0,"value":0},
        "2":{"key":0,"value":0},
        "3":{"key":0,"value":0},
    ...}
    }

我已經嘗試過了

        public JsonNode s;
        @JsonGetter("s")
        public Map<String,String> getS() {
            if (s == null) {
                return null;
            }
            ObjectMapper mapper = new ObjectMapper();
            Map<String, Object> map;
            map = mapper.convertValue(score, new TypeReference<Map<String, Object>>(){});
            Map<String,String> result;
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                if(entry.getValue() instanceof String){
                    result.put(entry.getKey(), (String) entry.getValue());
                }
            }
            return result;
        }

它可以用於測試,但是我收到下一個關於真實數據的錯誤

無法從[來源:UNKNOWN;在START_OBJECT令牌中反序列化java.lang.String實例。 行:-1,列:-1](通過參考鏈:java.util.LinkedHashMap [“ media”])

有什么建議嗎?

根據型號

@JsonGetter("s")
public Map<String,String> getS()

sMap<String,String>但是JSON中的media似乎是Object (可能是Map<String, Map<String,String>>

"media":{
    "1":{"key":0,"value":0},
    "2":{"key":0,"value":0},
    "3":{"key":0,"value":0},
    "4":{"key":0,"value":0},
 ...},

也許你應該使用

@JsonGetter("s")
public Map<String,Object> getS()

然后進一步投射對象。

我已經解決了如下

for (Map.Entry<String, Object> entry : map.entrySet()) {      
         result.put(entry.getKey(), entry.getValue().toString());
      }

Jackson (Java):反序列化相同的屬性名但返回不同的對象。 其中一個返回 object 和第二個列表<object><div id="text_translate"><p>我有一個這樣的 POJO:</p><pre> public class NewClass { String name; @JsonProperty("productType") ProductType productType2005; List&lt;ProductType&gt; productType; }</pre><p> 我想將 json 反序列化為 Pojo。 問題是我的屬性名稱相同 productType 但我可以期待兩種不同的返回類型或數據結構。</p><ol><li> 返回ProductType</li><li> return List&lt;ProductType&gt;因為屬性名稱相同我如何有效地使用 Jackson 注釋來解決它?</li></ol><p> 我使用 rest-assured 進行反序列化,使用 Lombok 進行典型的 getter 和 setter。</p></div></object>

[英]Jackson (Java) : deserialization for the same property name but return different objects. for one it return object and second List<Object>

暫無
暫無

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

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