JSON筆記,用於資料交換

學JAVA的好人發表於2020-10-19

目錄

 

JSON的定義

JSON的訪問

JSON的兩種存在形式

JSON兩個常用方法

JSON.stringify( json物件 )

JSON.parse( json字串 )

JSON在Java中的使用

使用匿名內部類省掉TypeToken類的繼承類


  1. JSON的定義

    1. JSON由鍵值對組成,並且由花括號({})包圍。

    2. 每個鍵由引號引起來,鍵和值之間使用冒號進行分隔,多組鍵值對之間使用逗號分隔

    3. 下面分別是int、字串、布林型別、陣列、集合、JSON陣列在JSON中的定義

var jsonObj = {
   "key1" : 12,
   "key2" : "abc",
   "key3" : true,
   "key4" : [11, "arr", false],
   "key5" : {
      "key5_1" : 551,
      "key5_2" : "key5_2_value"
   },
   "key6" : [{
          "key6_1_1" : 6611,
          "key6_6_2" : "key6_1_2_value"
       },{
          "key6_2_1" : 6621,
          "key6_2_2" : "key6_2_2_value"
   }]
};
  1. JSON的訪問

    1. JSON本身是一個物件

    2. JSON中的key可以理解為是物件中的一個屬性

    3. JSON中的key訪問就跟訪問物件的屬性一樣:json物件.key

alert(jsonObj.key1);    // 12
alert(jsonObj.key2);   // abc
alert(jsonObj.key3);   // true
alert(jsonObj.key4);   // 11,arr,false
alert(jsonObj.key5);   // [object Object]
alert(jsonObj.key6);   // [object Object],[object Object]
// 遍歷陣列
for (var i = 0; i < jsonObj.key4.length; i++) {
   alert(jsonObj.key4[i]);    // 11;arr;false
}
// 訪問集合中的元素
alert(jsonObj.key5.key5_1);    // 551
// 訪問JSON中的JSON 
var jsonItem = jsonObj.key6[0]; // 先取出JSON中JSON陣列的第一個元素(JSON型別的)
alert( jsonItem.key6_1_1 ); // 再輸出 6611
  1. JSON的兩種存在形式

    1. 形式1:以物件的形式存在,稱之為json物件

    2. 形式2:以字串的形式存在,稱之為json字串

    3. 使用何種形式:

      1. 一般我們要操作JSON中的資料的時候,需要JSON物件的格式

      2. 一般我們要在客戶端和伺服器之間進行資料交換的時候,使用JSON字串

  2. JSON兩個常用方法

    1. JSON.stringify( json物件 )

      1. 把json物件轉化為json字串

    2. JSON.parse( json字串 )

      1. 把json字串轉化為json物件

// 將json物件轉換為json字串
var jsonObjString = JSON.stringify(jsonObj);

// 把json字串轉換為json物件
var jsonObj2 = JSON.parse(jsonObjString);
  1. JSON在Java中的使用

    1. 需要gson-2.2.4.jar(谷歌提供)或者其他jar包

    2. 兩個方法

      1. toJson()方法:可以把Java物件轉換為json字串

      2. fromJson()方法:可以把json字串轉變為Java物件

    3. 三種情況

      1. javaBean和JSON的互轉

      2. List和JSON的互轉

      3. Map和JSON的互轉

    4. 程式碼展示

      1. javaBean和JSON的互轉

// 1、javaBean和JSON的互轉
@Test
public void test1(){
    // 建立一個Java物件
    Person person = new Person(1, "凌晨一點半");
    // 建立Gson物件例項
    Gson gson = new Gson();
    // 轉-->:toJson()方法可以把Java物件轉換為json字串
    String persinJsonString = gson.toJson(person);
    // 轉<--:fromJson()方法可以把json字串轉變為Java物件
        // 引數1:json字串; 引數2:轉換回去的Java物件的型別(需要.class)
   Person person1 = gson.fromJson(persinJsonString, Person.class);
}
  1. List和JSON的互轉

// 2、List和JSON的互轉
@Test
public void test2() {
    // 建立一個List
    List<Person> personList = new ArrayList<>();
    personList.add(new Person(1, "凌晨一點四十四"));
    personList.add(new Person(2, "凌晨一點四十五"));

    // 建立Gson物件
    Gson gson = new Gson();

    // 轉-->:把List轉換為json字串
    String personListJsonString = gson.toJson(personList);

    // 轉<--:把json字串轉換為List
    // List list = gson.fromJson(personListJsonString, personList.getClass());// 這樣轉會失敗,所得到的不是List
    // 寫一個類繼承TypeToken類,第二個引數建立一個該類的物件,再呼叫getType()轉換型別
    // List list = gson.fromJson(personListJsonString, new PersonListType().getType());
    
    // 使用匿名類可以不用寫一個類來繼承TypeToken類
    List<Person> list = gson.fromJson(personListJsonString, new TypeToken<List<Person>>(){}.getType());
}

 

public class PersonListType extends TypeToken<ArrayList<Person>> {
    // 需要指定泛型,泛型的型別就是json字串轉換為List時的型別
    // 什麼都不用幹,只需要設定好泛型型別就可以了
}
  1. Map和JSON的互轉

// 3、Map和JSON的互轉
@Test
public void  test3(){
    // 建立一個Map
    Map<Integer, Person> personMap = new HashMap<>();
    personMap.put(1, new Person(1, "凌晨2點整"));
    personMap.put(2, new Person(2, "凌晨2點零一分"));

    // 建立一個Gsom例項
    Gson gson = new Gson();

    // 轉-->:map轉換為json字串
    String personMapJsonString = gson.toJson(personMap);

    // 轉<--:json字串轉換為map
    // 寫一個類繼承TypeToken類,第二個引數建立一個該類的物件,再呼叫getType()轉換型別
    // Map<Integer, Person> map = gson.fromJson(personMapJsonString, new PersonMapType().getType());

 

public class PersonMapType extends TypeToken<HashMap<Integer, Person>> {
    // 需要指定泛型,泛型的型別就是json字串轉換為Map時的型別
    // 什麼都不用幹,只需要設定好泛型型別就可以了
}
  1. 使用匿名內部類省掉TypeToken類的繼承類

  2. // 使用匿名內部類可以不用寫類來繼承TypeToken類
        Map<Integer, Person> map = gson.fromJson(personMapJsonString, new TypeToken<HashMap<Integer,Person>>(){}.getType());
    }
    

     

相關文章