一、介紹
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
微信掃一掃
支付寶掃一掃