本示例基于前面几篇文章的代码。
一、JSON-lib框架,转换JSON
1、首先要去官方下载json-lib工具包
本示例中使用的是v2.3;json-lib还需要以下依赖包:
jakarta commons-lang 2.5
jakarta commons-beanutils 1.8.0
jakarta commons-collections 3.2.1
jakarta commons-logging 1.1.1
ezmorph 1.0.6
官方网址:http://json-lib.sourceforge.net/
然后在工程中添加如下jar包:
如果你还不了解JSON是什么?那么你应该可以看看http://www.json.org/json-zh.html
2、 要转换的JavaBean的代码如下:
- <span style="">package com.wy.pojo;
-
- import java.io.Serializable;
-
- /**
- * User对象必须实现serializable接口,因为放在session中的数据必须是可序列化的。
- * 否则会出现错误 setAttribute: Non-serializable attribute...
- * @author Administrator
- * @version 2011-10-6
- */
- public class User implements Serializable {
-
- private static final long serialVersionUID = 1L;
- private String username;
- private String password;
- private int age;
- private String sex;
- private String birthday;
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public int getAge(){
- return age;
- }
-
- public void setAge(int age){
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- public String getBirthday() {
- return birthday;
- }
-
- public void setBirthday(String birthday) {
- this.birthday = birthday;
- }
-
- @Override
- public String toString() {
- // TODO Auto-generated method stub
- return this.username +"#"+ this.password +"#"+ this.age +"#"+ this.sex +"#"+ this.birthday;
- }
-
- }
- </span>
3、 新建JsonlibTest测试类,基本代码如下:
- package com.wy.junittest;
-
- import org.junit.Before;
- import org.junit.Test;
-
- import com.wy.controller.annotation.EntryOrJsonController;
-
- public class JsonlibTest {
-
- @Before
- public void setUp() throws Exception {
- }
-
- //@Test
- public void testEntry2Json() {
- new EntryOrJsonController().entry2Json();
- }
-
- //@Test
- public void testList2Json() {
- new EntryOrJsonController().list2Json();
- }
-
- //@Test
- public void testMap2Json() {
- new EntryOrJsonController().map2Json();
- }
-
- //@Test
- public void testJson2Entry() {
- new EntryOrJsonController().json2Entry();
- }
-
- //@Test
- public void testJson2MorphDynaBean() {
- new EntryOrJsonController().json2MorphDynaBean();
- }
-
- //@Test
- public void testJson2Array() {
- new EntryOrJsonController().json2Array();
- }
-
- //@Test
- public void testJson2List() {
- new EntryOrJsonController().json2List();
- }
-
- //@Test
- public void testJson2Collection() {
- new EntryOrJsonController().json2Collection();
- }
-
- @Test
- public void testJson2Map() {
- new EntryOrJsonController().json2Map();
- }
- }
JSON中重要的对象:JSONObject、JSONArray、JSONSerializer,下面也是围绕着这几个对象来说明问题。
JSONObject是将Java对象转换成一个json的Object形式。
JSONArray是将一个Java对象转换成json的Array格式。
JSONSerializer也一样可以完成将Java对象转换成JSON。
JSONObject、JSONArray、JSONSerializer不仅可以将Java对象转换成JSON,还可以将JSON转换成Java对象。
Java对象序列化成JSON对象
1、 将JavaObject转换吃JSON字符串
- <span style="color: #4b4b4b;"><span style=""><span style="">/**
- * 1、 将JavaObject转换成JSON字符串
- * JSONObject是将Java对象转换成一个json的Object形式,
- * JSONArray是将一个Java对象转换成json的Array格式。
- * JSONSerializer是将Java对象转换成一个json。
- *
- * JSONArray、JSONObject、JSONSerializer可以将Java对象转换成JSON,也可将JSON字符串转换成Java对象。
- */
- @SuppressWarnings("static-access")
- public void entry2Json(){
- user = new User();
-
- user.setUsername("wy");
- user.setPassword("321");
- user.setAge(23);
- user.setSex("man");
- user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));
-
- log.info("==============Java Bean >>> JSON Object==================");
- JSONArray ja = jsonArray.fromObject(user);
- JSONObject jo = jsonObject.fromObject(user);
- JSON jsja = jsonSerializer.toJSON(user);
-
- log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONObject: \r\n"+jo+"\r\n"+"JSONSerializer: \r\n"+jsja);
-
- }</span></span></span>
2、 将JavaList集合转换吃JSON字符串
- <span style="color: #4b4b4b;"><span style=""><span style="">/**
- * 2.将JavaList集合转换吃JSON字符串
- * 如果你是转换List集合,一定得用JSONArray或是JSONSrializer提供的序列化方法。
- * 如果你用JSONObject.fromObject方法转换List会出现异常,
- * 通常使用JSONSrializer这个JSON序列化的方法,它会自动识别你传递的对象的类型,然后转换成相应的JSON字符串。
- */
- @SuppressWarnings("static-access")
- public void list2Json(){
- List<User> userList = new ArrayList<User>();
- for(int i=0;i<3;i++){
- user = new User();
- user.setUsername("wy"+i);
- user.setPassword("321"+i);
- user.setAge(23+i);
- user.setSex("man"+i);
- user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date())+" "+i);
-
- userList.add(user);
- }
-
- log.info("==============Java List >>> JSON Object==================");
- JSONArray ja = jsonArray.fromObject(userList);
- //JSONObject jo = jsonObject.fromObject(userList); +"JSONObject: \r\n"+jo+"\r\n"
- JSON jsja = jsonSerializer.toJSON(userList);
-
- log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONSerializer: \r\n"+jsja);
- }</span></span></span>
3、 将Map集合转换成JSON对象
- /**
- * 3.将Map集合转换成JSON对象
- *
- */
- @SuppressWarnings("static-access")
- public void map2Json(){
- user = new User();
- user.setUsername("wy");
- user.setPassword("321");
- user.setAge(23);
- user.setSex("man");
- user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));
-
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("bool", Boolean.TRUE);
- map.put("int", 321);
- map.put("Long", 321.01);
- map.put("Str", "wy");
- map.put("array", new String[]{"wy", "321"});
- map.put("func", "function(i){ return this.arr[i]; }");
- map.put("user", user);
-
- log.info("==============Java Map >>> JSON Object==================");
- JSONArray ja = jsonArray.fromObject(map);
- JSONObject jo = jsonObject.fromObject(map);
- JSON jsja = jsonSerializer.toJSON(map);
-
- log.info("JSONArray: \r\n"+ja+"\r\n"+"JSONObject: \r\n"+jo+"\r\n"+"JSONSerializer: \r\n"+jsja);
- }
-
JSON对象反序列化成Java对象
1、 将json字符串转成Java对
- /**
- * 4.JSON对象反序列化成Java对象
- *
- */
- public void json2Entry(){
- log.info("==============JSON Object String >>> Java Bean ==================");
- jsonObject = JSONObject.fromObject(json);
- User joUser = (User)JSONObject.toBean(jsonObject, User.class);
- log.info("JSONObject: \r\n"+joUser.toString());
- }
2、 将json字符串转换成动态Java对象(MorphDynaBean)
- /**
- * 5.将json字符串转换成动态Java对象(MorphDynaBean)
- * 转换后的对象Object是一个MorphDynaBean的动态JavaBean,通过PropertyUtils可以获得指定的属性的值。
- */
- public void json2MorphDynaBean(){
- log.info("==============JSON Object String >>> Java MorphDynaBean ==================");
- JSON j = JSONSerializer.toJSON(json);
- Object obj = JSONSerializer.toJava(j);//MorphDynaBean
- String userName = null;
- try {
- userName = PropertyUtils.getProperty(obj, "username")+"";
- } catch (IllegalAccessException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- log.info("JSONSerializer: \r\n"+obj.toString()+" "+userName);
- }
3、 将json字符串转成Java的Array数组
- /**
- * 6. 将json字符串转成Java的Array数组
- *
- */
- public void json2Array(){
- log.info("==============JSON String >>> Java Array ==================");
- json = "[" + json + "]";
- jsonArray = JSONArray.fromObject(json);
- Object[] obj = jsonArray.toArray();
- User[] user = (User[])JSONArray.toArray(jsonArray, User.class);
- log.info("JSONArray: \r\n"+obj+" "+obj[0]+"\r\n"+user+" "+user[0]);
- }
4、 将JSON字符串转成Java的List集合
- /**
- * 7.将JSON字符串转成Java的List集合
- */
- public void json2List(){
- json = "[" + json + "]";
- log.info("==============JSON Array String >>> Java List ==================");
- jsonArray = JSONArray.fromObject(json);
- List<User> user = jsonArray.toList(jsonArray, User.class);
-
- log.info("JSONArray: \r\n"+user.get(0).toString());
- }
5、 将json字符串转换成Collection接口
- /**
- * 8.将json字符串转换成Collection接口
- */
- public void json2Collection(){
- json = "[" + json + "]";
- log.info("==============JSON Array String >>> Java Collection ==================");
- jsonArray = JSONArray.fromObject(json);
- Collection<User> user = jsonArray.toCollection(jsonArray, User.class);
- Object[] obj = user.toArray();
- log.info("JSONArray: \r\n"+user+" "+obj);
- }
6、 将json字符串转换成Map集合
- /**
- * 9.将json字符串转换成Map集合
- */
- public void json2Map(){
- log.info("==============JSON String >>> Java Map ==================");
- jsonObject = JSONObject.fromObject(json);
- Map<String, Class<?>> clazzMap = new HashMap<String, Class<?>>();
- clazzMap.put("A", User.class);
- Map<String, ?> mapBean = (Map) JSONObject.toBean(jsonObject, Map.class, clazzMap);
- log.info("JSONObject "+ mapBean);
- Set<String> set = mapBean.keySet();
- Iterator<String> iter = set.iterator();
- while (iter.hasNext()) {
- String key = iter.next();
- log.info("JSONObject "+ key + ":" + mapBean.get(key).toString());
- }
- }
将JSON返回到页面
1、HttpServletResponse
- /**
- * 10. 将JSON返回到页面
- * @param response
- */
- public String entry2JSON(){
- user = new User();
- user.setUsername("wy");
- user.setPassword("321");
- user.setAge(23);
- user.setSex("man");
- user.setBirthday(new SimpleDateFormat("yyyy-MM-d").format(new Date()));
-
- log.info("==============Java Bean >>> JSON Object==================");
- JSONArray ja = jsonArray.fromObject(user);
- JSONObject jo = jsonObject.fromObject(user);
- JSON jsja = jsonSerializer.toJSON(user);
- return jo.toString();
- }
-
- /**
- * 将JSON返回到页面
- * @param response
- */
- /*@RequestMapping(value="/returnJson", method=RequestMethod.GET)
- public void commonReturnType(HttpServletResponse response){
- try {
- PrintWriter out = response.getWriter();
- out.print(new EntryOrJsonController().entry2JSON());
- out.flush();
- out.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }*/
2、PrintWriter out
- /**
- * 将JSON返回到页面
- * 默认策略生产viewName
- * @param out
- */
- /*@RequestMapping(value="/returnJson", method=RequestMethod.POST)
- public void commonReturnType(PrintWriter out){//其实也是从HttpServletResponse 通过getWriter()得到out
- out.print(new EntryOrJsonController().entry2JSON());
- out.flush();
- out.close();
- }*/
3、ModelAndView
- @RequestMapping(value="/returnJson", method=RequestMethod.GET)
- public ModelAndView commonReturnType(){
- ModelAndView mav = new ModelAndView();
- mav.addObject("json", new EntryOrJsonController().entry2JSON());
- mav.setViewName("returnJson");
- return mav;
- }
4、@ResponseBody
- /**
- * 注解
- * 将JSON返回到页面
- * 默认策略生产viewName
- * @return
- */
- @ResponseBody
- @RequestMapping(value="/returnJson", method=RequestMethod.POST)
- public String commonReturnTypeAnno(){
- String jsonAnnotation = new EntryOrJsonController().entry2JSON();
- return jsonAnnotation;
- }
视图层接受JSON
returnJson.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
-
- <title>JSON输出到页面</title>
-
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
-
- </head>
-
- <body>
- JSON输出到页面. <br/>
- <c:if test="${json != null}">
- 通过GET方式请求并以ModelAndView返回的JSON: ${json}
- </c:if>
- <c:if test="${jsonAnnotation != null}">
- 完全基于注解返回的JSON: ${jsonAnnotation}
- </c:if>
- <form action="<%=path%>/returnJson.do" method="post">
- <input type="submit" value="提交" />
- </form>
- </body>
- </html>
附件中是完整的Controller。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。