JavaWeb——JSON

本文介绍了JSON作为轻量级的数据交换格式,以及如何利用JSON在服务端与JavaScript之间进行通信。通过一个Java实例展示了如何将对象转换为JSON字符串,但指出这种方法存在类型转换问题。接着,提出了使用成熟的JSON工具包来解决这个问题,使得JavaScript解析得到的JSON对象中的属性值保持原始类型,简化了后续处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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包缺一不可。

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

未完,待补…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陌白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值