第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 jackson(Java) 反序列化對象中的 json 對象?

如何使用 jackson(Java) 反序列化對象中的 json 對象?

胡子哥哥 2023-04-13 14:15:41
如何使用 jackson(Java) 反序列化對象中的 json 對象(在我的例子中,對象Offer存在于current字段中)?輸入字符串:message.getMessage();{"header":"OFFER","message":"{\"author\":\"Peter Smith\",\"previous\":null,\"current\":{\"id\":\ "eOUQieQdvB\",\"authorUserId\":\"foo\"}}"}ObjectMapper mapper = new ObjectMapper();PushEventMessage<PushEvent<Offer>> pushEventMessage = mapper.readValue(message.getMessage(), PushEventMessage.class);pushEventMessage.getMessage();{"author":"Peter Smith","previous":null,"current":{"id":"eOUQieQdvB","authorUserId":"foo"}}PushEvent<Offer> pushEvent = mapper.readValue(pushEventMessage.getMessage(), PushEvent.class);pushEvent.getAuthor(); // is OK and contain "Peter Smith"pushEvent.getCurrent() // is KO and contain {id=eOUQieQdvB, authorUserId=foo}我想反序列化:Offer offer= mapper.readValue(pushEvent.getCurrent() + "", Offer.class);我的錯誤是:com.fasterxml.jackson.core.JsonParseException: Unexpected character ('i' (code 105)): was expecting double-quote to start field name at [Source: (String)"{id=eOUQieQdvB, authorUserId=foo,編輯 1,我添加PushEvent<T>類。import lombok.*;@Data@Builder@AllArgsConstructor@NoArgsConstructor@ToStringpublic class PushEvent<T> {    String author;    T previous;    T current;    String error;}編輯 2,我試試這個,但結果是一樣的PushEvent<Offer> pushEvent = mapper.readValue(pushEventMessage.getMessage().replaceAll("\\\"", "\""), PushEvent.class);我采用@Smutje 的解決方案,這解決了第一個問題。?。【庉?3,我有一個java.time.ZonedDateTime對象Offer。{"author":"Peter Smith","previous":null,"current":{"id":"00Yno9WwsL","authorUserId":"foo","createdAt":{"offset":{"totalSeconds" :0,"id":"Z","rules":{"transitionRules":[],"transitions":[],"fixedOffset":true}},"zone":{"id":"UTC" “規(guī)則”:{“transitionRules”:[],“transitions”:[],“fixedOffset”:true}},“dayOfMonth”:11,“dayOfWeek”:“SUNDAY”,“dayOfYear”:42,“month” ":"二月","年":2018,"小時":1,"分鐘":0,"納米":0,"秒":0,"月值":2,"年表":{"id" :“國際標準化組織”,“日歷類型":"iso8601"}}}}
查看完整描述

2 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

由于許多映射框架無法使用泛型或繼承層次結構正確反序列化對象,因此以下內容很難看但應該是可能的


PushEvent<Offer> pushEvent = mapper.readValue(pushEventMessage.getMessage(), PushEvent.class);

String serializedOffer = mapper.writeValueAsString(pushEventMessage.getCurrent());

Offer offer = mapper.readValue(serializedOffer, Offer.class);

pushEvent.setCurrent(offer);

說明:Jackson 反序列化您的內部對象Offer,而不是像您所說的那樣反序列化,而是LinkedHashMap在將 JSON 對象讀取為 actual 之前再次將其序列化為 JSON 對象Offer。


您嘗試將 the 讀LinkedHashMap入 aOffer失敗,因為您(隱含地)使用了toString的表示來LinkedHashMap解析它不會產生有效的 JSON。


編輯 4 答案:,如果對象包含一個ZonedDateTime. 寫入和讀取時使用它:


ObjectMapper mapper = new ObjectMapper().registerModule(new JavaTimeModule());

mapper.setDateFormat(new StdDateFormat());


查看完整回答
反對 回復 2023-04-13
?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

錯誤消息告訴您問題是什么:“期望雙引號開始字段名稱”。

從簡短的檢查來看,您讀取 json 字符串的代碼看起來是正確的,因此請確保為其提供有效數據。

提示:您可以通過簡單地序列化一個演示對象來生成已知的良好數據:

new ObjectMapper().writeValueAsString(demoObject);

然后您可以嘗試使用該字符串運行您的代碼,這將告訴您您的輸入是否有效。


查看完整回答
反對 回復 2023-04-13
  • 2 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號