JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,而且都提供了对json的支持(C,C++,C#,JavaScript,Pyhton)。这样使得JSON称为理想的数据交换语言。
json轻量级是跟xml比较。
数据交换客户端和服务器之间的数据交换格式。
1. json的定义
json是由键值对组成,并且由花括号(大括号)
包围。每个键值由引号引起来,键和值之间使用冒泡进行分割,多组键值对之间进行逗号。json就是一个对象
<head> <title>json</title> <script type="text/javascript"> var a={ "key1":"values1", "key2":"values2" }; alert(a.key1); </script> </head>
2. json 的访问
json本身就是一个对象。
json中的key可以理解为是对象中的一个属性。
json中 的key就跟访问对象的属性是一个样的;
json
3. JSON的两个常用的方法
json的存在有两种形式:
一种是:对象的形式存在,叫json对象
一种是:字符串的形式存在,叫json字符串
需要json中的对象的时候需要json对象的格式。
需要在客户端和服务器之间进行数据交换的时候,使用json字符串。
JSON.stringify():把json对象转化为json字符串
JSON.parse():把json字符串转化为json对象
需要先导入json的jar包
public class Demo { @Test public void test1(){ Gson gson = new Gson(); Student stu = new Student("张三",18,"男"); //对象转化为字符串 String s = gson.toJson(stu); //字符串转化为对象 Student student = gson.fromJson(s, Student.class); System.out.println(student); } }
如果将json转化为对象,只需要使用
Student student = gson.fromJson(s, Student.class);
但是json转化为list的时候不能使用List.class
编译器会报错
这时候需要先新建一个类继承 TypeToken<>
在泛里写上需要转化的类型
public class StudentListType extends TypeToken<ArrayList<Student>> { }
然后在后端写
//将字符串转化为list Gson gson = new Gson(); List<Student> list1= gson.fromJson(s, new StudentListType().getType()); System.out.println(list1);
还有一种方式是采用匿名内部类,省去了在外部包下创建类
//将字符串转化为list----采用匿名内部类 List<Student> list1= gson.fromJson(s,new TypeToken<List<Student>>(){}.getType()); System.out.println(list1);
采用匿名内部类转化
//Map和json字符串的转化 Map<Integer, Student> map = new HashMap<>(); map.put(1,new Student("李四",10,"女")); map.put(2,new Student("王五",20,"男")); //map转json String s1 = gson.toJson(map); System.out.println(s1); //json转map Object o = gson.fromJson(s1, new TypeToken<Map<Integer, Student>>() { }.getType()); System.out.println(o);