六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 35|回复: 0

使用JSON-LIB转换JAVA对象

[复制链接]

升级  92.67%

51

主题

51

主题

51

主题

秀才

Rank: 2

积分
189
 楼主| 发表于 2013-1-23 02:42:05 | 显示全部楼层 |阅读模式
使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:
使用JSON-LIB,首先要有几个支持的包:
http://json-lib.sourceforge.net下载json-lib-1.1-jdk15.jar
commons-lang.jarcommons-logging.jarcommons-beanutils.jar  这些包可在tomcat/comon/lib下找到
EZMorph 下载地址http://ezmorph.sourceforge.net
morph-1.0.1 下载地址:http://morph.sourceforge.net
 
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class JSONTest {    public static void main(String[] args) {           JSONTest j = new JSONTest();           j.ObjectList2json();       }           public void ObjectList2json(){        Map map = new HashMap();                List jlist = new ArrayList();        JSONTestBean bean1 = new JSONTestBean("zhangbo","123123");        JSONTestBean bean2 = new JSONTestBean("lisi","65489");        Props props = new Props("127.0.0.1","8008");                jlist.add(bean1);        jlist.add(bean2);                map.put("Props", props);        map.put("jsonObjectList", jlist);                JSONArray jsonArray = JSONArray.fromObject(map);           System.out.println(jsonArray);       }        public void arr2json() {           boolean[] boolArray = new boolean[] { true, false, true };           JSONArray jsonArray = JSONArray.fromObject(boolArray);           System.out.println(jsonArray);           // prints [true,false,true]       }          public void list2json() {           List list = new ArrayList();          list.add("first");           list.add("second");           JSONArray jsonArray = JSONArray.fromObject(list);           System.out.println(jsonArray);           // prints ["first","second"]       }          public void createJson() {           JSONArray jsonArray = JSONArray.fromObject("['json','is','easy']");           System.out.println(jsonArray);           // prints ["json","is","easy"]       }          public void map2json() {           Map map = new HashMap();        map.put("name", "json");           map.put("bool", Boolean.TRUE);           map.put("int", new Integer(1));           map.put("arr", new String[] { "a", "b" });           map.put("func", "function(i){ return this.arr; }");              JSONObject json = JSONObject.fromObject(map);           System.out.println(json);           // prints           // ["name":"json","bool":true,"int":1,"arr":["a","b"],"func":function(i){           // return this.arr; }]       }          public void bean2json() {           JSONObject jsonObject = JSONObject.fromObject(new JSONTestBean("zhangbo","234234"));           System.out.println(jsonObject);           /*           * prints            * {"func1":function(i){ return this.options;           * },"pojoId":1,"name":"json","func2":function(i){ return           * this.options; }}           */       }          public void json2bean() {           String json = "{name=\"json2\",func1:true,pojoId:1,func2:function(a){ return a; },options:['1','2']}";   //        JSONObject jb = JSONObject.fromString(json);   //        JSONObject.toBean(jb, MyBean.class);           System.out.println();       }   }其它两个测试实体Bean:public class JSONTestBean {    private String userName;    private String password;    public JSONTestBean() {    }    public JSONTestBean(String username, String password) {        this.userName = username;        this.password = password;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }}//===================================================public class Props {    private String ip;    private String port;    public Props() {    }    public Props(String ip, String port) {        this.ip = ip;        this.port = port;    }    public String getIp() {        return ip;    }    public void setIp(String ip) {        this.ip = ip;    }    public String getPort() {        return port;    }    public void setPort(String port) {        this.port = port;    }} 使用起来很方便,有了JSON-LIB的支持,可以使开发者轻松构建起基于JSON的AJAX应用程序
附加:关于使用JSON-LIB转换带有DATE类型的对象需要额外的一些设置
 
 
JsonConfig cfg=new JsonConfig();cfg.registerJsonValueProcessor(java.util.Date.class, new JsonValueProcessorImpl());cfg.registerJsonValueProcessor(java.sql.Date.class, new JsonValueProcessorImpl());JSONObject obj = JSONObject.fromObject(info,cfg); 
JsonValueProcessorImpl为实现了源代码中的接口JsonValueProcessor
 
import java.text.SimpleDateFormat;import java.util.Date;import net.sf.json.JsonConfig;import net.sf.json.processors.JsonValueProcessor;public class JsonValueProcessorImpl implements JsonValueProcessor{ private String format="yyyy-MM-dd"; public JsonValueProcessorImpl(){   } public JsonValueProcessorImpl(String format){  this.format=format; } public Object processArrayValue(Object value, JsonConfig jsonConfig) {  String[] obj={};  if(value instanceof Date[]){   SimpleDateFormat sf=new SimpleDateFormat(format);   Date[] dates=(Date[])value;   obj =new String[dates.length];   for (int i = 0; i < dates.length; i++) {    obj=sf.format(dates);   }  }  return obj; } public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {  if(value instanceof Date){   String str=new SimpleDateFormat(format).format((Date)value);   return str;  }  return value.toString(); } public String getFormat() {  return format; } public void setFormat(String format) {  this.format = format; } }   
这也只是实现了将DATE类型转换成yyyy-MM-dd的格式...测试一下吧!~~~
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表