1. 程式人生 > >第三十五章:JSON格式

第三十五章:JSON格式

作者:java_wxid
什麼是JSON?
1.介紹:JSON (JavaScript Object Notation) 是一種輕量級的資料交換格式。 易於人閱讀和編寫。同時也易於機器解析和生成。 JSON採用完全獨立於語言的文字格式,但是也使用了類似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 這些特性使JSON成為理想的資料交換格式。
2.一種輕量級的資料交換格式
3.輕量級是跟xml做比較。json也可以用來儲存資料,並且相同的資料使用json儲存會比xml儲存經小很多,而且解析速度要快很多。
在這裡插入圖片描述
客戶端使用json
伺服器使用json
傳資料用json格式

Json在JavaScript中的使用。
json的定義
json是由鍵值對組成,並且由大括號包圍,每個鍵都必須加引號引起來,鍵和值之間使用冒號進行分隔。
多組鍵值對之間使用逗號進行分隔。

json的訪問
var 變數名 = {
“key”:值 , 值可以有很多種型別,number、string,json物件,比較陣列,比較json陣列
“key1”:值
};

如何訪問json物件:
變數名.key

		<script type="text/javascript">
			// json的定義
			var jsonObj = {
					"key1" : 12,	// number
					"key2" : "abc",  // string
					"key3" : [33,"333",true], // 陣列
					"key4" : { // json套json
						"key4_1" : 41,
						"key4_2" : "42String"
					},
					"key5" : [{
						"key5_1_1" : 511,
						"key5_1_2" : 512
					},{
						"key5_2_1" : 521,
						"key5_2_2" : 522
					}]
			};	
			// json的訪問
// 			alert( jsonObj.key1 );//12
// 			alert( jsonObj.key2 );//abc
// 			alert( jsonObj.key3[0] );//33
// 			alert( jsonObj.key4.key4_2 );//42String
// 			alert( jsonObj.key5[1].key5_2_2 );//522
// 			alert( jsonObj );
// 			json物件轉字串
			var jsonString = JSON.stringify( jsonObj );
			alert(jsonString);
		    /* {"key1":12,"key2":"abc","key3":[33,"333",true],
		  	  "key4":{"key4_1":41,"key4_2":"42String"},
			"key5":[{"key5_1_1":511,"key5_1_2":512},
			{"key5_2_1":521,"key5_2_2":522}]} */
			// json字串轉json物件
			var obj = JSON.parse( jsonString );
			alert(obj.key1);
		</script>

Json的兩個常用方法
JSON.stringify() : 把json物件轉換成為json字串
JSON.parse() : 把json字串轉換成為json物件

Json在java中的使用
在java中使用json,需要先匯入jar包。gson-2.2.4.jar

javaBean和json的互轉

@Test
public void test1() throws Exception {
	Person person = new Person(1,"國哥很帥!");
	// 是谷歌jar包提供用來操作json的工具類
	Gson gson = new Gson();
	// 把person物件轉換成為json字串
	String jsonString = gson.toJson(person);	
	System.out.println( jsonString );
	// 把json字串轉換成為javaBean物件
	Person person1 = gson.fromJson(jsonString, Person.class);		
	System.out.println( person1 );
}

List 和json的互轉

	@Test
	public void test2() throws Exception {
		List<Person> list = new ArrayList<Person>();
		list.add(new Person(1, "哥帥一次"));
		list.add(new Person(2, "哥帥二次"));
		list.add(new Person(3, "哥帥三次"));
		// 建立一個json的工具類
		Gson gson = new Gson();
		// 把list集合轉換成為json字串
		String listJsonString = gson.toJson(list);
		System.out.println( listJsonString );    		
//		List<Person> list2 = gson.fromJson(listJsonString, new PersonListType().getType());    		
		List<Person> list2 = gson.fromJson(listJsonString, new TypeToken<ArrayList<Person>>() {}.getType());    		
		System.out.println( list2 );
		Person person = list2.get(0);
		System.out.println(person);
	}

map 和json的互轉

@Test
public void test3() throws Exception {
	Map<String, Person> map = new HashMap<String, Person>();
	map.put("p1", new Person(1, "飛龍"));
	map.put("p2", new Person(2, "哥很帥氣,我愛你!"));
	map.put("p3", new Person(3, "哥94V587"));
	
	Gson gson = new Gson();
	// 把集合轉換json字串
	String mapJsonString = gson.toJson(map);
	System.out.println( mapJsonString );
	// fromJson方法,如果要返回一個javaBean物件。返回Class型別
	// 如果要返回一個集合,要使用TypeToken類
	Map<String, Person> map2 = gson.fromJson(mapJsonString, new TypeToken<HashMap<String, Person>>(){}.getType());
	System.out.println( map2 );
	Person p = map2.get("p2");
	System.out.println(p);
}

案例:

@Test
public void test() {
	Person person = new Person(1,"很帥");
	System.out.println("person:"+person);
	Gson gson = new Gson();
	String json = gson.toJson(person);//person類轉json
	System.out.println("person轉json:"+json);
	Person person2 = gson.fromJson(json, Person.class);//json轉Bean物件
	System.out.println("json轉Person"+person2);
	List<Person> list = new ArrayList<Person>();
	list.add(new Person(1, "哥帥一次"));
	list.add(new Person(2, "哥帥二次"));
	list.add(new Person(3, "哥帥三次"));
	System.out.println("list集合:"+list);
	String gson2 = gson.toJson(list);//集合轉json
	System.out.println("list集合轉json:"+gson2);
	Map<String, Person> map = new HashMap<String, Person>();
	map.put("p1", new Person(1, "龍"));
	map.put("p2", new Person(2, "哥很帥氣,我愛你!"));
	map.put("p3", new Person(3, "哥94V587"));
	System.out.println("map集合:"+map);
	String gString = gson.toJson(map);//集合轉json
	System.out.println("Map集合轉json:"+gString);
	Map<String, Person> map2 = gson.fromJson(gString,new TypeToken<HashMap<String, Person>>(){}.getType());//json轉Bean
	System.out.println("json轉map:"+map2);
}

結果:

person:Person [id=1, name=很帥]
person轉json:{"id":1,"name":"很帥"}
json轉PersonPerson [id=1, name=很帥]
list集合:[Person [id=1, name=哥帥一次], Person [id=2, name=哥帥二次], Person [id=3, name=哥帥三次]]
list集合轉json:[{"id":1,"name":"哥帥一次"},{"id":2,"name":"哥帥二次"},{"id":3,"name":"哥帥三次"}]
map集合:{p1=Person [id=1, name=龍], p2=Person [id=2, name=哥很帥氣,我愛你!], p3=Person [id=3, name=哥94V587]}
Map集合轉json:{"p1":{"id":1,"name":"龍"},"p2":{"id":2,"name":"哥很帥氣,我愛你!"},"p3":{"id":3,"name":"哥94V587"}}
json轉map:{p1=Person [id=1, name=龍], p2=Person [id=2, name=哥很帥氣,我愛你!], p3=Person [id=3, name=哥94V587]}