關於json簡單的開發場景大家都會用,但是如果涉及到復雜類型的json轉化如何操作呢?
之前在開發的業務場景中遇到需要在代碼塊中對如下形式的數據進行處理
[ { "id": "9", "attachments": { "key1": { "download_url": "7955ca8e97dc219f9dda0b8102540247f48675ca", "filename": "logo.png" } } }, { "id": "10", "attachments": { "key2": { "download_url": "7955ca8e97dc219f9dda0b8102540247f48675ca", "filename": "logo2.png" } } }, { "id": "13", "attachments": [] } ]
很容易看出來,以上的數據是個數組類型。他的 attachments元素看起來就很奇怪了,看形式應該是個map,但是接收的時候我將 attachments 定義成object元素接收過來,排除空的情況,剩下的的使用map的類型接收 我將他書寫成
我先定義了一個對象,如下:
public class FileEO{ private String download_url; private String filename; }
然后書寫定義map HashMap<String,FileEO> 但是在直接作為對象轉化的時候轉化不成功,一直報錯,經過一番查找發現
Json對於復雜類型的轉化需要先定義type,解決方案如下:
/** * 復雜類型的json轉化需要先定義type 然后再進行轉化 */ public static Type defineType() { return new TypeReference<Map<String, Object>>() { }.getType(); } public static void main(String[] args) { /* 這里簡單寫一個demo書寫使用形式 在工作中偶然遇到了這種形式的 實際情況比這種更復雜一點 map中是一個對象,用普通的封裝之后去解析會報錯*/ String str = " {\"money\":\"100.00\",\"payMethod\":\"alipay\"}"; Type type = defineType(); Map<String, Object> map = JSON.parseObject(str, type); System.out.println(map.get("money")); System.out.println(map.get("payMethod")); }
之前沒有了解過復雜類型的json轉化,這里遇到了,標記一下。