1. 程式人生 > 其它 >c++ Message與Folder 拷貝 析構(沒有動態空間的類)

c++ Message與Folder 拷貝 析構(沒有動態空間的類)

JSON學習筆記

json 是一種輕量級(相對於XML)的資料交換格式。通俗的講,json就是一種特定的格式。

JSON的使用

json的定義

json 是由鍵值對組成,並且由花括號(大括號)包圍。每個鍵由引號引起來,鍵和值之間使用冒號進行分隔, 多組鍵值對之間進行逗號進行分隔。

json 的定義示例:

var jsonObj = {
	"key1":12,
	"key2":"abc",
	"key3":true,
	"key4":[11,"arr",false],
	"key5":{
	      "key5_1":51,
	      "key5_2":"key5_2_value",
	},
	"key6":[{
		"key6_1_1":611,
		"key6_1_2":"key6_1_2_value",
		},{
		"key6_2_1":621,
		"key6_2_2":"key6_2_2_value",
	}]
}

json 的訪問

json 本身是一個物件。

json 中的 key 我們可以理解為是物件中的一個屬性。

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

在上文定義的基礎上的訪問示例

alert(typeof(jsonObj));// object json 就是一個物件
alert(jsonObj.key1); //12
alert(jsonObj.key2); // abc
alert(jsonObj.key3); // true
alert(jsonObj.key4);// 得到陣列[11,"arr",false]
// json 中 陣列值的遍歷
for(var i = 0; i < jsonObj.key4.length; i++) {
alert(jsonObj.key4[i]);
}
alert(jsonObj.key5.key5_1);//551
alert(jsonObj.key5.key5_2);//key5_2_value
alert( jsonObj.key6 );// 得到 json 陣列
// 取出來每一個元素都是 json 物件
var jsonItem = jsonObj.key6[0];
// alert( jsonItem.key6_1_1 ); //6611
alert( jsonItem.key6_1_2 ); //key6_1_2_value

json兩個常用方法

json 的存在有兩種形式。

一、物件的形式存在,我們叫它 json 物件。

二、字串的形式存在,我們叫它 json 字串。

一般我們要操作 json 中的資料的時候,需要 json 物件的格式。 一般我們要在客戶端和伺服器之間進行資料交換的時候,使用 json 字串。

JSON.stringify() 把 json 物件轉換成為 json 字串

JSON.parse() 把 json 字串轉換成為 json 物件

JSON 在 java 中的使用

這裡使用到了三個jar包,分別為 gson-2.2.4.jar,hamcrest-core-1.3.jar,junit-4.12.jar。

Person類中有id,name兩種屬性

public class JsonTest {
    //javaBean 和 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);
    }

    //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);
    }

    //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 TypeToken<HashMap<Integer,Person>>(){}.getType());
        System.out.println(personMap2);
        Person p = personMap2.get(1);
        System.out.println(p);
    }
}