一、介紹
Gson是Google公司開發的Java語言的JSON解析工具,它可以將Java對象轉換成對應的Json串,也可以將Json串轉換成Java對象。其中,Gson轉換為Map可以讓我們更加方便地進行數據處理。
二、使用步驟
使用Gson將Json串轉換為Map類型的對象,需要四個步驟:
1. 創建Gson對象
在使用Gson進行Json與Java對象之間的轉換時,必須創建一個Gson對象,該對象提供了操作Json數據的方法。
Gson gson = new Gson();
2. 解析Json數據
首先,需要定義Json字元串。
String jsonString = "{\"key1\":\"value1\",\"key2\":\"value2\"}";
接下來,直接將jsonString轉換成Map對象。
Type type = new TypeToken<Map<String, String>>() {}.getType(); Map<String, String> map = gson.fromJson(jsonString, type);
3. 獲取Map中的值
現在,我們已經將Json字元串轉換為Map對象,接下來可以使用get()方法獲取Map中的值。
String value1 = map.get("key1"); // "value1" String value2 = map.get("key2"); // "value2"
4. 解析複雜Json串
在解析複雜的Json串時,可以使用TypeToken將Json串類型化為對應的Java類型,然後通過Gson將Json數據解析成Java對象。
class User { private long id; private String name; private List<String> friends; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getFriends() { return friends; } public void setFriends(List<String> friends) { this.friends = friends; } } String jsonStr = "{\"id\":1,\"name\":\"Tom\",\"friends\":[\"Alice\",\"Bob\"]}"; User user = gson.fromJson(jsonStr, User.class);
三、常見問題
1. Json串中含有不合法的字元怎麼辦?
當Json串中含有不合法的字元時,如單引號或反斜杠,Gson並不能正確地解析。這時,可以使用Apache Commons庫的StringEscapeUtils類對Json串進行轉義處理。
String jsonString = "{\"key1\":\"value1\",\"key2\":\"This string contains 'single quotes' and \\backslashes\\\\.\"}"; jsonString = StringEscapeUtils.escapeJava(jsonString); Type type = new TypeToken<Map<String, String>>() {}.getType(); Map<String, String> map = gson.fromJson(jsonString, type);
2. 如何將Map對象轉化為Json串?
Gson可以將Java對象轉換為對應的Json串,可以將Map對象轉換為Json串。
Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); String jsonString = gson.toJson(map);
3. 如何忽略不需要的屬性?
在反序列化Json數據時,有時需要忽略部分屬性。可以通過使用@Expose註解來實現屬性的忽略。
class User { @Expose private int id; @Expose private String name; private String password; } GsonBuilder builder = new GsonBuilder(); builder.excludeFieldsWithoutExposeAnnotation(); Gson gson = builder.create(); User user = gson.fromJson("{\"id\":1,\"name\":\"Tom\",\"password\":\"123456\"}", User.class);
4. 如何處理日期格式的數據?
Gson默認情況下無法將Json數據中的日期格式化為Java對象中的Date類型。為了解決這個問題,可以自定義TypeAdapter實現Json與Java對象之間的轉換。
class DateAdapter extends TypeAdapter<Date> { private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void write(JsonWriter out, Date value) throws IOException { if (value == null) { out.nullValue(); } else { out.value(dateFormat.format(value)); } } @Override public Date read(JsonReader in) throws IOException { Date parse = null; try { parse = dateFormat.parse(in.nextString()); } catch (ParseException e) { e.printStackTrace(); } return parse; } } GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new DateAdapter()); Gson gson = builder.create(); String json = "{\"time\":\"2019-11-11 11:11:11\"}"; Map<String, Object> map = gson.fromJson(json, new TypeToken<Map<String, Object>>() {}.getType()); Date date = new Date((long) map.get("time"));
四、代碼示例
下面是將Json串轉為Map和將Map轉為Json中的代碼示例。
1. Json串轉換為Map
Gson gson = new Gson(); String jsonString = "{\"key1\":\"value1\",\"key2\":\"value2\"}"; Type type = new TypeToken<Map<String, String>>() {}.getType(); Map<String, String> map = gson.fromJson(jsonString, type); System.out.println(map.get("key1")); // "value1" System.out.println(map.get("key2")); // "value2"
2. Map轉換為Json串
Gson gson = new Gson(); Map<String, String> map = new HashMap<>(); map.put("key1", "value1"); map.put("key2", "value2"); String jsonString = gson.toJson(map); System.out.println(jsonString); // {"key1":"value1","key2":"value2"}
五、總結
通過本文我們學習了如何使用Gson將Json串解析成Map類型的對象,並通過實例代碼演示了這一過程。
原創文章,作者:HQUG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144393.html