json和Jackson的使用
阿新 • • 發佈:2021-02-06
目錄
什麼是json?
概念:JavaScript Object Notation JavaScript 物件標記表示法。
在Java語言中我們把一個人的name,age封裝成一個物件(person)。把物件當做引數。
JavaScript中也是,例如這個物件var p = {"name":"tomas","age":10}; 【JavaScript會解析它】
作用:json現在多用於儲存和交換文字資訊的語法,進行資料的傳輸,json 比XML更小,更快,更易解析;
json的使用。
語法:
語法: #資料在名稱/值對中:json資料是由鍵值對構成的 *鍵用引號(單雙都行)引起來,也可以不使用引號; *值得取值型別: 1,數字 整數和浮點數 2,字串 在雙引號中 3,邏輯值 true or false 4,陣列 在 方括號中“[]” 5,物件 在花括號中{} #資料由逗號分開 #多個數據由,分割 #花括號儲存物件 #方括號儲存陣列 var person = {'name':'tomas',"age":23}; var persons = [{'name':'tomas',"age":23}, {'name':'jack',"age":21}, {'name':'alice',"age":18}] 獲取資料: 1,json物件.key key表示鍵值。 2,json物件['key'] 3,陣列物件['索引'] var name = person['name']; var name1 = person.name; var tempPerson= persons[1];
如何得到json中的資料呢?
運用for in迴圈。
// 獲取persons陣列中的所有json資料 for in 迴圈,獲得鍵的值 for(let key in person){ console.log( key); // the type of key is a string console.log(typeof key); console.log(person[key]); } for(var i=0;i<persons.length;i++){ var p =persons[i]; // console.log(p); for(let key in p){ console.log(key); console.log(p[key]); } }
json資料和Java物件的轉換。
我們用Jackson【springMVC內建的json轉換器】
1,匯入依賴
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
2,建立Jackson的核心物件-ObjectMapper
ObjectMapper om = new ObjectMapper();
3,Java物件轉json,json轉Java物件。
public class JacksonTest {
// java物件轉為json
public static void main(String[] args) throws Exception {
Person per = new Person();
per.setId(1);
per.setName("tomas");
// jackson 核心物件
ObjectMapper om = new ObjectMapper();
/**
* writeValue(引數1,obj);幾種過載
* 引數1
* File 將物件轉為json字串,並儲存到指定的檔案中
* Writer 將物件轉為json字串,並將json資料填充到字元輸入流中
* OutputStream 將物件轉為json字串,並將資料填充到位元組輸出流中
*
* writeValueAsString(obj),將物件轉為json
*
*/
String s = om.writeValueAsString(per);
System.out.println(s);
// 把Jason資料變為Java物件
Person p1 = om.readValue(s,Person.class);
System.out.println(p1);
}
}
結果:
Jackson的兩個重要註解
1, @JsonIgnore 排除屬性。物件屬性不轉換json
2,@JsonFormat 屬性值的格式化 例如日期 有毫秒,我們並不需要。
所以@JsonFormat(pattern = "yyyy-MM-dd")
細節:
Java中List集合會轉為json陣列。
Map集合就是json形式【本身 key = value 鍵值對形式】;