当前位置: 代码迷 >> JavaScript >> 运用JSON-LIB转换JAVA对象
  详细解决方案

运用JSON-LIB转换JAVA对象

热度:266   发布时间:2013-03-28 10:20:24.0
使用JSON-LIB转换JAVA对象
使用JSON-LIB可以极大的简化JAVA对象转换成JSON对象所需进行的操作,更可以避免人工操作生成JSON对象字符串时带来的麻烦和误操作:
使用JSON-LIB,首先要有几个支持的包:
http://json-lib.sourceforge.net下载json-lib-1.1-jdk15.jar
commons-lang.jar、commons-logging.jar,commons-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[i]; }"); 
 
        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[i]; }] 
    } 
 
    public void bean2json() { 
        JSONObject jsonObject = JSONObject.fromObject(new JSONTestBean("zhangbo","234234")); 
        System.out.println(jsonObject); 
        /*
         * prints 
         * {"func1":function(i){ return this.options[i];
         * },"pojoId":1,"name":"json","func2":function(i){ return
         * this.options[i]; }}
         */ 
    } 
 
    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[i]=sf.format(dates[i]);
   }
  }
  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;
}

}
  相关解决方案