JSON
1. 什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。
JSON定义语法(最下面)
2. 利用JSON实现服务端与JavaScript之间通信
一个简单的例子:
-
index_1.jsp中内容:
接收服务端数据并将它写入到响应体中
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script type="text/javascript"> var stuObj = ${requestScope.key}; // 从request作用域对象得到服务端提供学生对象 window.alert(typeof stuObj + "<br/>" + stuObj.sid + "学员姓名:" + stuObj.sname); </script> </head> <body> </body> </html>
-
Student.java中内容
一个实体类
public class Student { private Integer sid; private String sname; public Student() { } public Student(Integer sid, String sname) { this.sid = sid; this.sname = sname; } public Integer getSid() { return sid; } public void setSid(Integer sid) { this.sid = sid; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } }
-
ReflectUtil.java
一个工具类,用于将任意对象内容转换为JSON格式字符串返回
public class ReflectUtil { // 作用:将任意对象内容转换为JSON格式字符串返回 // 参数:一个高级引用类型对象 public static StringBuffer jsonObject(Object obj) { Class classFile = null; Field fieldArray[] = null; StringBuffer str = new StringBuffer("{"); // 1. 获得当前对象隶属的[class 文件] classFile = obj.getClass(); // 2. 获得类文件所有属性 fieldArray = classFile.getDeclaredFields(); // 3. 获得当前对象所有属性的值 for (int i = 0; i < fieldArray.length; ++i){ Field field = fieldArray[i]; field.setAccessible(true); // 确保私有访问权限可以在class文件外部使用 String fieldName = field.getName(); // 获得属性名称 Object value = null; try { value = field.get(obj); } catch (IllegalAccessException e) { e.printStackTrace(); } // 4. 将获得属性及其值拼接为JSON格式字符串 str.append("\""); str.append(fieldName); str.append("\":"); str.append("\""); str.append(value); str.append("\""); if (i < fieldArray.length - 1) str.append(","); else str.append("}"); } return str; } }
-
OneServlet.java内容
- 用于从服务端传递数据给index_1.jsp
public class OneServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Student stu = new Student(10, "mike"); // 通过反射机制将Student类型对象内容转换为JSON格式字符串 String str = String.valueOf(ReflectUtil.jsonObject(stu)); request.setAttribute("key", str); request.getRequestDispatcher("/index_1.jsp").forward(request, response); } }
-
效果:
JavaScript对于得到的JSON格式的字符串解析进而从中得到了一个JSON对象,并将该对象中的内容取了出来。
上面把任意对象整成JSON格式字符串的工具类毕竟是我们自己草草写的,存在的问题不少,就比如我们的10在JavaScript的JSON对象中是一个字符串的形式,而不是一个整型,如果要在后面作运算的话还得进一步转换,太麻烦了。
下面我们来学习使用别人写好的JSON工具包,将存在的问题统统击破!😀
首先,我们需要引入以下jar包:
注:这六个jar包缺一不可。
使用:
1. json对象字串
// obj是待转换对象
JSONObject jsonObject = JSONObject.fromObject(obj);
String str = jsonObject.toString(); // 得到一个转换好的JSON格式的字符串
2. json数组字串
JSONArray jsonArray = JSONArray.fromObject(list);
String str = jsonArray.toString(); // 得到一个json数组字串
用这种JSON工具包去替换我们上面写的工具类,JavaScript解析得到的JSON对象中sid属性值10就不再是一个字符串类型了,而是一个整型了(即它原本的类型)。
未完,待补…