package com.develop.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import net.sf.ezmorph.object.DateMorpher;
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.CycleDetectionStrategy;
import net.sf.json.util.JSONUtils;
import net.sf.json.util.PropertyFilter; public class JsonUtil {
/**
* 转成jsonOjbect对象
* @param obj
* @return
*/
public static JSONObject toJsonOjbect(Object obj){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//可防止hibernate模式下的关联关系子对象中包含父对象造成死循环
JSONObject jsonObject = JSONObject.fromObject(obj,jsonConfig);
return jsonObject;
} /**
* 转成jsonArray对象
* @param obj
* @return
*/
public static JSONArray toJsonArray(Object obj){
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//可防止hibernate模式下的关联关系子对象中包含父对象造成死循环
JSONArray jsonArray = JSONArray.fromObject(obj,jsonConfig);
return jsonArray;
} /**
* json串或jsonobject对象转成Map
* @param obj
* @return
*/
public static Map<?, ?> jsonToMap(Object obj){
JSONObject jsonObject = null;
if(obj instanceof JSONObject){
jsonObject = (JSONObject)obj;
}else{
jsonObject = JSONObject.fromObject(obj);
} Map<Object, Object> map = new HashMap<Object, Object>(jsonObject.size());
Iterator<?> it = jsonObject.keys();
while(it.hasNext()){
Object key = it.next();
Object value = jsonObject.get(key);
if(value instanceof JSONObject){
map.put(key, jsonToMap(value));
}else if(value instanceof JSONArray){
map.put(key, jsonArrToList(value));
}else{
map.put(key, value);
}
} return map;
} /**
* list串或jsonArray对象转成list
* @param obj
* @return
*/
public static List<?> jsonArrToList(Object obj){ JSONArray jsonArray = null;
if(obj instanceof JSONArray){
jsonArray = (JSONArray)obj;
}else{
jsonArray = JSONArray.fromObject(obj);
} List list = new ArrayList(jsonArray.size());
Iterator<?> it = jsonArray.iterator();
while(it.hasNext()){
Object next = it.next();
if(next instanceof JSONObject){
list.add(jsonToMap(next));
}else if(next instanceof JSONArray){
list.add(jsonArrToList(next));
}else{
list.add(next);
}
} return list;
} /**
* json串转java对象
* @param jsonStr json串
* @param rootClass 要转成的主对象
* @param subClassMap 主对象中包含的list类型的属性Map 格式:subClassMap.put("iordersegments", IorderSegment.class); key是子对象在主对象中的属性名, value是子对象类型
* @return
*/
public static <T>T jsonToBean(String jsonStr,Class<T> rootClass,Map<String, Class> subClassMap){
JsonConfig filterNullConfig = new JsonConfig();
//过滤掉参数值为null的参数,防止后边的时间转换出错
filterNullConfig.setJsonPropertyFilter(new PropertyFilter() {
@Override
public boolean apply(Object clazz, String name, Object value) {
boolean isFilter = false;
if(value==null||"".equals(value)){
isFilter = true;
}
return isFilter;
}
}); JSONObject jsonObject = JSONObject.fromObject(jsonStr,filterNullConfig); String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd","yyyy-MM-dd HH:mm"};//不过好像只有 yyyy-MM-dd HH:mm:ss 格式有效
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats)); JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass(rootClass);
if(subClassMap!=null&&subClassMap.size()>0){
jsonConfig.setClassMap(subClassMap);
} return (T)JSONSerializer.toJava(jsonObject, jsonConfig);
} }

最新文章

  1. 利用on和off方法编写高效的js代码
  2. Unity AssetBundle爬坑手记
  3. CentOS下Hadoop-2.2.0集群安装配置
  4. Java设计模式-抽象工厂模式(Abstract Factory )
  5. BZOJ-1433 假期的宿舍 最大流+基础建图
  6. PDA调用WCF服务引用
  7. 素数环(C - 暴力求解)
  8. Bandit Wargame Level12 Writeup
  9. 20170505 PHP实践中知识点
  10. Express全系列教程之(六):cookie的使用
  11. 更新 TeX Live 软件包
  12. WPF 耗时操作时,加载loging 动画 (BackgroundWorker 使用方法)
  13. mysql 开发进阶篇系列 11 锁问题 (恢复和复制的需要,对锁机制的影响)
  14. 线程中的current thread not owner异常错误
  15. MVC使用记录
  16. hibernate validation内置注解及自定义注解
  17. 2019.02.15 codechef Favourite Numbers(二分+数位dp+ac自动机)
  18. hive外部表
  19. ashx和aspx的区别
  20. MongoDB journal与oplog解惑

热门文章

  1. 条件查询,有input和select框,当查询条件获取焦点时支持摁下enter键查询
  2. Javascript算术运算
  3. 会场安排问题---nyoj14
  4. 【iCore3 双核心板_ uC/OS-III】例程十:消息队列
  5. easyui datagrid 单选框 效果
  6. what's the difference between dim as and dim as new?
  7. 带清空按钮的EditText
  8. jQuery 控制表单和表格
  9. Boyer-Moore algorithm
  10. Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析