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

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)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券