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)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。