Javaweb-案例练习-3-JSON对象

作者: 凯哥Java | 来源:发表于2019-07-30 09:18 被阅读0次

    JSON对象和简单练习

    前面一篇我们查找的图书的name都是通过逗号隔开,然后拼接成一个字符串传给浏览器。其实我们可以把多个图书名称用数组格式传给浏览器,前端JS代码通过遍历这个数组,也是可以拿到这些name数据。现在,我们一般不用数组,而是用JSON这格式。本篇就来看看JSON是如何解决上一篇字符串传给浏览器的代码,以及JSON对象中常见的操作。

    1环境搭建

    在使用JSON对象之前,我们需要提前下载几个jar包,拷贝到java web工程下的\WEB-INF\lib\路径下

    以下这几个jar包可以到maven仓库下载,我这里也贴出来了这几个下载地址。

    commons-lang-xx.jar

    commons-collections-3.2.2.jar

    ezmorph-1.0.6.jar

    json-lib-2.4-jdk15.jar

    2把字符串改成JSON

    上一篇我们在SearchBookAJAXServlet.java中是用字符串拼接,这次我们这里改成JSON。

    然后找打menu_search.jsp,更改下面红圈这行代码。

    这个时候ss直接接收的就是一个数组对象,这里是JSONArray对象。其中eval函数的作用就是让后面这个数组对象作为一个完整表达式存在,不然会被切割乱七八糟。保存代码之后,部署tomcat,然后重启,浏览器访问

    在搜索框输入一个j或者java,看看控制台打印内容。

    我这页面查询了两次,所以输出两次。

    所以,使用JSON对象一句话就搞定了,比前面字符串拼接简单多了。下面,来看看JSON的常见几个操作。

    3 JSON对象常见操作

    这里,还是在这个图书项目,新建一个json的包,然后新建一个JSONTest.java类

    我们来写一个测试用例,作用就是把JavaBean对象转成JSON格式的Sting.

    使用场景1:使用JSONObject对象封装java中高级对象类型数据。

    package com.kaigejava.json;

    import org.junit.Test;

    import com.kaigejava.domain.Book;

    import net.sf.json.JSONObject;

    public class JsonTest {

    @Test

    public void test1() {

    Book b = new Book();

    b.setId("12345");

    b.setName("上下五千年");

    b.setPrice(58);

    String s = JSONObject.fromObject(b).toString();

    System.out.println(s);

    }

    }

    运行这个单元测试,输出如下内容

    {"category":"","description":"","id":"12345","name":"上下五千年","pnum":0,"price":58}

    看看这个结果输出,我们book只设置了三个属性,没有设置的分类和描述,默认是空字符串这个值,商品数量由于是int类型,默认就是0.

    使用场景2:使用JSONArray封装List集合数据

    @Test

    public void test2() {

    List<Book> list = new ArrayList<Book>();

    Book b1 = new Book();

    b1.setId("1001");

    b1.setName("西游记");

    b1.setPrice(58);

    Book b2 = new Book();

    b2.setId("1002");

    b2.setName("三国演义");

    b2.setPrice(68);

    Book b3 = new Book();

    b3.setId("1003");

    b3.setName("水浒传");

    b3.setPrice(48);

    list.add(b1);

    list.add(b2);

    list.add(b3);

    String ss = JSONArray.fromObject(list).toString();

    System.out.println(ss);

    }

    运行得到输出:

    [{"category":"","description":"","id":"1001","name":"西游记","pnum":0,"price":58},{"category":"","description":"","id":"1002","name":"三国演义","pnum":0,"price":68},{"category":"","description":"","id":"1003","name":"水浒传","pnum":0,"price":48}]

    输出是一个数组,里面每一个元素都是一个JSON格式的对象。

    使用场景3:使用JsonConfig对象过滤数据

    有时候,我们JSON数据并不想要其中一些字段,例如我们查询图书的结果,正常返回都是图书的id,图书name,图书pnum,图书price,图书catogry,图书description。

    但是,有时候我们就只想要图书name和图书price返回,其他字段不需要。这个时候就可以使用JsonConfig对象来过滤一些字段。

        @Test

    public void test3() throws SQLException {

    QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());

    List<Book> list = qr.query("select * from book", new BeanListHandler<Book>(Book.class));

    //过滤掉 图书数量,描述和id,分类信息,只要价格和图书名称

    JsonConfig jc = new JsonConfig();

    // 过滤,不要这些字段信息

    jc.setExcludes(new String[] {"pnum", "id", "category", "description"});

    String ss = JSONArray.fromObject(list, jc).toString();

    System.out.println(ss);

    }

    运行得到:

    [{"name":"Java编程思想","price":78.9},{"name":"python入门宝典","price":59},{"name":"JavaScript程序设计","price":69},{"name":"来自底层的奋斗","price":39},{"name":"红楼梦","price":59},{"name":"厚黑学","price":89},{"name":"西游记","price":34.9},{"name":"Groovy程序设计","price":49.89}]

    JSON对象的简单使用就学习到这里。

    本文来源:http://kaigejava.com/article/detail/523

    凯哥公众号:凯哥Java(kaigejava)

    相关文章

      网友评论

        本文标题:Javaweb-案例练习-3-JSON对象

        本文链接:https://www.haomeiwen.com/subject/nftgrctx.html