1. 程式人生 > 其它 >json和Jackson的使用

json和Jackson的使用

技術標籤:筆記javajsonjs

目錄

什麼是json?

json的使用。

語法:

如何得到json中的資料呢?

json資料和Java物件的轉換。

1,匯入依賴

2,建立Jackson的核心物件-ObjectMapper

3,Java物件轉json,json轉Java物件。

Jackson的兩個重要註解

細節:


什麼是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 鍵值對形式】;