JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,Java中有很多庫可以將JSON字符串轉(zhuǎn)換成Java對象,著名的有Jackson、Gson等,但是這些庫的使用過程比較繁瑣,需要創(chuàng)建很多Java類對應(yīng)JSON中的字段。而Java Map則是一種可以動態(tài)添加、刪除元素的數(shù)據(jù)結(jié)構(gòu),因此我們可以使用Java Map來簡便地將JSON字符串轉(zhuǎn)換成Java對象。
public static Map<String, Object> jsonToMap(String json) throws IOException { ObjectMapper mapper = new ObjectMapper(); return mapper.readValue(json, new TypeReference<Map<String, Object>>() {}); }
上面的代碼中,使用了Jackson庫中的ObjectMapper類來進(jìn)行JSON字符串和Java Map的轉(zhuǎn)換,readValue()方法可以將JSON字符串轉(zhuǎn)換成Java對象。而new TypeReference<Map<String, Object>>() {}則是一個(gè)匿名內(nèi)部類,用來指定轉(zhuǎn)換的目標(biāo)類型為Map<String, Object>。
接下來看一下將Java Map轉(zhuǎn)換成JSON字符串的代碼:
public static String mapToJson(Map<String, Object> map) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(map); }
同樣是使用Jackson庫中的ObjectMapper類,writeValueAsString()方法可以將Java對象轉(zhuǎn)換成JSON字符串。
使用Java Map來進(jìn)行JSON轉(zhuǎn)換的好處是不需要創(chuàng)建Java類對應(yīng)JSON中的字段,而是將JSON轉(zhuǎn)換成一個(gè)可以動態(tài)添加、刪除元素的數(shù)據(jù)結(jié)構(gòu),非常方便。然而需要注意的是,使用Java Map將JSON轉(zhuǎn)換成Java對象的過程可能會損失類型安全性,因?yàn)镴ava Map中的value類型都是Object,無法確定真正的數(shù)據(jù)類型。