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对象,并将该对象中的内容取了出来。

java后端处理返回参数国际化 javaweb返回json数据_java

上面把任意对象整成JSON格式字符串的工具类毕竟是我们自己草草写的,存在的问题不少,就比如我们的10在JavaScript的JSON对象中是一个字符串的形式,而不是一个整型,如果要在后面作运算的话还得进一步转换,太麻烦了。

下面我们来学习使用别人写好的JSON工具包,将存在的问题统统击破!😀

首先,我们需要引入以下jar包:

java后端处理返回参数国际化 javaweb返回json数据_javascript_02

:这六个jar包缺一不可。

idea中引入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就不再是一个字符串类型了,而是一个整型了(即它原本的类型)。