為什麼要使用json :
1. json格式好了解
2. json格式資料在多種語言中,比較容易處理。 使用java, javascript讀寫json格式的資料比較容易。
3. json格式資料他占用的空間下,在網絡中傳輸快, 使用者的體驗好。
處理json的工具庫: gson(google), fastjson(阿裡), jackson, json-lib…
本篇文章介紹jackson和gson的簡單使用方法
使用Jackson工具包
導入Jackson依賴
<!-- jackson依賴 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
// JSON 在 java 中的使用(使用jackson工具包)
public class TestJson {
public static void main(String[] args) throws JsonProcessingException {
// 1.将java對象轉為json格式 --- 序列化
Province shanghai = new Province(10,"上海","滬","直轄市");
// 建立ObjectMapper對象
ObjectMapper mapper = new ObjectMapper();
// 調用writeValueAsString(Object o) 将o對象轉為json格式的字元串傳回
String json = mapper.writeValueAsString(shanghai);
// 2. list集合轉json數組
// 這個方法可以接受list集合或者map集合, 序列化成為json數組
String json = mapper.writeValueAsString(list);
System.out.println(json);
// 3. 将json格式的字元串, 轉為Java對象, 反序列化
// 都是ObjectMapper.read()的相關方法
// 使用readValue(String json, Class<T> valueType) 傳回這個java對象
Province p = mapper.readValue(json, Province.class);
System.out.println(p);
// 4. 将json格式的數組,反序列化回list集合
List<Province> listPro = mapper.readValue(json, new TypeReference<List<Province>>() {});
listPro.forEach(province -> System.out.println(province.toString()));
}
}
使用gson工具包
導入gson依賴
<!-- gson依賴 -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
// JSON 在 java 中的使用(使用gson工具包)
// 1. javaBean(java對象) 和 json 的互轉
@Test
public void test1(){
Person person = new Person(1,"迪麗熱巴");
// 建立 Gson 對象執行個體
Gson gson = new Gson();
// toJson 方法可以把 java 對象轉換成為 json 字元串
String personJsonString = gson.toJson(person);
System.out.println(personJsonString);
// fromJson 把 json 字元串轉換回 Java 對象
// 第一個參數是 json 字元串
// 第二個參數是轉換回去的 Java 對象類型的位元組碼
Person person1 = gson.fromJson(personJsonString, Person.class);
System.out.println(person1);
}
// 2. List 和 json 的互轉
@Test
public void test2() {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "迪麗熱巴"));
personList.add(new Person(2, "古力娜紮"));
Gson gson = new Gson();
// 把 List 轉換為 json 字元串
String personListJsonString = gson.toJson(personList);
System.out.println(personListJsonString);
// 将 json 轉為 list
List<Person> list = gson.fromJson(personListJsonString, new PersonListType().getType());
System.out.println(list);
Person person = list.get(0);
System.out.println(person);
}
// 3. map 和 json 的互轉
@Test
public void test3(){
Map<Integer,Person> personMap = new HashMap<>();
personMap.put(1, new Person(1, "迪麗熱巴"));
personMap.put(2, new Person(2, "馬爾紮哈"));
Gson gson = new Gson();
// 把 map 集合轉換成為 json 字元串
String personMapJsonString = gson.toJson(personMap);
System.out.println(personMapJsonString);
// Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
PersonMapType().getType());
Map<Integer,Person> personMap2 = gson.fromJson(personMapJsonString, new
TypeToken<HashMap<Integer,Person>>(){}.getType());
System.out.println(personMap2);
Person p = personMap2.get(1);
System.out.println(p);
}
使用fastjson工具包
導入fastjson依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
序列化:
String jsonString = JSON.toJSONString(obj);
反序列化:
VO vo = JSON.parseObject("jsonString", VO.class);
泛型反序列化:
List<VO> list = JSON.parseObject("jsonString", new TypeReference<List<VO>>(){});
注意:VO必須有預設無參構造方法