JSON和JAVA的bean的相互转换

package com.linzl.cn.json;

import java.util.Date;
/**
测试VO
**/
public class Demo {
private String name;
private Date date;

public Demo() {
}

public Demo(String name, Date date) {
    this.name = name;
    this.date = date;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Date getDate() {
    return date;
}

public void setDate(Date date) {
    this.date = date;
}

@Override
public String toString() {
    return "Demo [name=" + name + ", date=" + date + "]";
}

}

package com.linzl.cn.json;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

/**
* 关于时间的json处理器的应用 json-lib
*/

public class DateJsonValueProcessor implements JsonValueProcessor {
public static final String DEFAULT_DATE_PATTERN = “yyyy-MM-dd HH:mm:ss”;
private DateFormat dateFormat;

public DateJsonValueProcessor(String datePattern) {
    if (null == datePattern)
        dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
    else
        dateFormat = new SimpleDateFormat(datePattern);
}

private Object process(Object value) {
    if (value != null) {
        return dateFormat.format((Date) value);
    } else {
        return "";
    }
}

public Object processArrayValue(Object arg0, JsonConfig arg1) {
    return process(arg0);
}

public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
    return process(arg1);
}

}

package com.linzl.cn.json;

import net.sf.json.util.PropertyFilter;

/**
空属性过滤器
**/
public class EmptyPropertyFilter implements PropertyFilter {

// 将值为空的属性过滤,尤其当时间为空时,json转 bean,会出现Class net.sf.ezmorph.MorphException:
// Unable to parse the date
public boolean apply(Object source, String name, Object value) {
    if (value == null) {
        return true;
    }
    if (value instanceof String) {
        String keyValue = (String) value;
        if (keyValue == null || "".equals(keyValue.trim())
                || "null".equals(keyValue.trim())) {
            return true;
        }
    }
    return false;
}

}

package com.linzl.cn.json;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sf.ezmorph.bean.MorphDynaBean;
import net.sf.ezmorph.object.DateMorpher;
import net.sf.json.JSON;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import net.sf.json.JsonConfig;
import net.sf.json.util.JSONUtils;
import net.sf.json.xml.XMLSerializer;

/**
* JSON和JAVA的bean的相互转换 JSONHelper.java
*/

public final class JSONHelper {

/**
 * 将 数组 \Collection\Map | xml字符串 | VO对象 转换成 JSON
 * 
 * @param obj
 * @return
 */
public static String toJSON(Object obj) {
    boolean flag = true;
    String json = "";

    if (obj instanceof String) {
        flag = false;
        String xml = (obj == null ? "" : (String) obj);
        if (xml.startsWith("<?xml")) {
            XMLSerializer xmlSerializer = new XMLSerializer();
            json = ((JSON) xmlSerializer.read(xml)).toString(2);
        } else {
            flag = true;
        }
    }

    if (flag) {
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.registerJsonValueProcessor(Date.class,
                new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss"));
        jsonConfig.setJsonPropertyFilter(new EmptyPropertyFilter());

        json = JSONSerializer.toJSON(obj, jsonConfig).toString();
    }
    return json;
}

/**
 * 
 * @param json
 *            可以为普通json字符串,也可以是JSONArray或JSONObject对象
 * @param beanClz
 *            json数据中存储的bean对象,可以为Null
 * @return List or Map
 */
public static Object toCollection(Object json, Class beanClz) {
    if (json instanceof String) {// 由collection转成JSON数据,现在要转回集合
        if (json == null || "".equals(json.toString().trim())) {
            try {
                throw new Exception("json参数不能为空");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        if (!json.toString().startsWith("{")
                && !json.toString().startsWith("[")) {
            try {
                throw new Exception("json数据必须是{或[开头");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        if (json.toString().startsWith("[")) {
            json = JSONArray.fromObject(json);
        } else if (json.toString().startsWith("{")) {
            json = JSONObject.fromObject(json);
        }
    }

    if (json instanceof JSONArray) {
        JSONArray list = (JSONArray) json;
        if (beanClz == null) {// 得到的是一个存储着动态bean的list
            JsonConfig jsonConfig = new JsonConfig();
            jsonConfig.setRootClass(beanClz);
            // 设置过滤器
            jsonConfig.setJavaPropertyFilter(new EmptyPropertyFilter());
            return (List) JSONSerializer.toJava(list, jsonConfig);
        } else {
            return (List) JSONArray.toCollection(list, beanClz);
        }
    } else if (json instanceof JSONObject) {
        if (beanClz != null) {
            Map resultMap = new HashMap();
            JSONObject map = (JSONObject) json;
            Set set = map.keySet();
            Iterator iter = set.iterator();
            Object key = null;
            Object vo = null;
            while (iter.hasNext()) {
                key = iter.next();
                vo = toBean(map.get(key).toString(), beanClz);
                resultMap.put(key, vo);
            }
            return resultMap;
        } else {// map中放的是JSONObject
            return (Map) json;
        }
    }

    return null;
}

/**
 * 将json转换成xml格式
 * 
 * @param object
 * @return
 */
public static String toXml(Object obj) {
    JSON json = JSONSerializer.toJSON(obj);
    XMLSerializer xmlSerializer = new XMLSerializer();
    // xmlSerializer.setTypeHintsEnabled(false);
    // change node names
    xmlSerializer.setRootName("root");
    return xmlSerializer.write(json);
}

/**
 * json由JavaBean转换而来,JavaBean只拥有简单属性
 * 
 * @param json
 * @param beanClz
 * @return
 */
public static Object toBean(String json, Class beanClz) {
    JSONUtils.getMorpherRegistry().registerMorpher(
            new DateMorpher(new String[] { "yyyy-MM-dd HH:mm:ss" }));
    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.setRootClass(beanClz);
    jsonConfig.setJavaPropertyFilter(new EmptyPropertyFilter());
    JSON jsonObject = JSONSerializer.toJSON(json);
    return JSONSerializer.toJava(jsonObject, jsonConfig);
}

public static void main(String[] args) {
    JSONHelper helper = new JSONHelper();
    // helper.simpleVO();
    // helper.xmlJson();

    // String listJson =
    // "[{\"date\":\"2013-10-21 22:57:09\",\"name\":\"linzl\"},{\"date\":\"\",\"name\":\"linwc\"},{\"date\":\"2014-10-26 22:57:09\",\"name\":\"linsj\"}]";
    // List resultList = (List) toCollection(listJson, null);
    // for (int i = 0; i < resultList.size(); i++) {
    // MorphDynaBean listDemo = (MorphDynaBean) resultList.get(i);
    // // System.out.println("第" + i + "个-->\n" + listDemo);
    // System.out.println(listDemo.get("date"));
    // System.out.println(listDemo.get("name"));
    // }
    // helper.listVO();
    // helper.setVO();

    // String mapJson =
    // "{\"second\":{\"name\":\"linwc\"},\"third\":{\"date\":\"2014-10-26 23:31:08\",\"name\":\"linsj\"},\"first\":{\"date\":\"2014-10-26 23:31:08\",\"name\":\"linzl\"}}";
    // Map map = (Map) toCollection(mapJson, null);
    // Set set = map.keySet();
    // Iterator iter = set.iterator();
    // boolean flag = false;
    // while (iter.hasNext()) {
    // Object key = iter.next();
    // System.out.println(key);
    // if (flag) {// 知道转换成bean的class信息
    // Demo demo = (Demo) toBean(map.get(key).toString(), Demo.class);
    // System.out.println(demo);
    // } else {
    // JSONObject obj = (JSONObject) map.get(key);
    // System.out.println("name-->" + obj.get("name"));
    // System.out.println("date-->" + obj.get("date"));
    // }
    // }
    helper.mapVO();
}

/**
 * 测试例子:简单bean的转换
 */
private void simpleVO() {
    String json = "{\"date\":\"\",\"name\":\"linzl\"}";
    Demo demo = (Demo) toBean(json, Demo.class);
    System.out.println(demo);
}

/**
 * 测试例子:json与xml的转换
 */
private void xmlJson() {
    String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
            + "<link>"
            + "<first firstAge=\"25\">测试w3cshool 生成xml  first</first>"
            + "<second secondAge=\"没有值\">测试w3cshool 生成xml  second</second>"
            + "</link>";
    System.out.println("xml转成JSON-->\n" + toJSON(xml));// 转成JSON
    System.out.println("JSON转成xml-->\n" + toXml(toJSON(xml)));// 由JSON转回xml
}

/**
 * 测试例子:List拥有多个简单bean的转换
 */
private void listVO() {
    List resultList = null;
    List list = new ArrayList();
    list.add(new Demo("linzl", new Date()));
    list.add(new Demo("linwc", null));
    list.add(new Demo("linsj", new Date()));
    String listJson = toJSON(list);
    System.out.println("List多个bean的转换-->" + listJson);
    // 测试由list存储vo得到的json数据,还原为list且存储的内容为对应的vo
    Class beanClz = Demo.class;
    resultList = (List) toCollection(listJson, beanClz);
    if (beanClz == null) {// 动态bean,将对应的属性取出来后再set到对应的vo属性去
        for (int i = 0; i < resultList.size(); i++) {
            MorphDynaBean listDemo = (MorphDynaBean) resultList.get(i);
            System.out.println("---------------第" + i + "个---------------");
            System.out.println(listDemo.get("name"));
            System.out.println(listDemo.get("date"));
        }
    } else {
        for (int i = 0; i < resultList.size(); i++) {
            Demo listDemo = (Demo) resultList.get(i);
            System.out.println("第" + i + "个-->\n" + listDemo);
        }
    }
}

/**
 * 测试例子: Set拥有多个简单bean的转换 和list是一个道理
 */
private void setVO() {
    Set set = new HashSet();
    set.add(new Demo("linzl", new Date()));
    set.add(new Demo("linwc", null));
    set.add(new Demo("linsj", new Date()));
    String setJson = toJSON(set);
    System.out.println("Set多个bean的转换-->" + setJson);
    // 测试由list存储vo得到的json数据,还原为list且存储的内容为对应的vo
    List setList = (List) toCollection(setJson, Demo.class);
    for (int i = 0; i < setList.size(); i++) {
        Demo setDemo = (Demo) setList.get(i);
        System.out.println("第" + i + "个-->\n" + setDemo);
    }
}

/**
 * 测试例子:Map拥有多个简单bean的转换
 */
private void mapVO() {
    Map map = new HashMap();
    map.put("first", new Demo("linzl", new Date()));
    map.put("second", new Demo("linwc", null));
    map.put("third", new Demo("linsj", new Date()));

    String mapJson = toJSON(map);
    System.err.println("Map多个bean的转换-->" + mapJson);

    Map resultMap = null;
    Class beanClz = null;// Demo.class;
    if (beanClz != null) {// 知道转换成bean的class信息
        resultMap = (Map) toCollection(mapJson, Demo.class);
        System.out.println(resultMap);
    } else {// 不知道转换成bean的class信息,则通过get出来后再set到对应的vo属性去
        resultMap = (Map) toCollection(mapJson, null);
        Set set = resultMap.keySet();
        Iterator iter = set.iterator();
        while (iter.hasNext()) {
            Object key = iter.next();
            JSONObject obj = (JSONObject) resultMap.get(key);
            System.out.println(key);
            System.out.println("name-->" + obj.get("name"));
            System.out.println("date-->" + obj.get("date"));
            System.out.println();
        }
    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值