json 是一种轻量级(相对于XML)的数据交换格式。通俗的讲,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 中的 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.stringify()
把 json 对象转换成为 json 字符串
JSON.parse()
把 json 字符串转换成为 json 对象
这里使用到了三个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); } }