1. package com.develop.util;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8.  
  9. import net.sf.ezmorph.object.DateMorpher;
  10. import net.sf.json.JSONArray;
  11. import net.sf.json.JSONObject;
  12. import net.sf.json.JSONSerializer;
  13. import net.sf.json.JsonConfig;
  14. import net.sf.json.util.CycleDetectionStrategy;
  15. import net.sf.json.util.JSONUtils;
  16. import net.sf.json.util.PropertyFilter;
  17.  
  18. public class JsonUtil {
  19. /**
  20. * 转成jsonOjbect对象
  21. * @param obj
  22. * @return
  23. */
  24. public static JSONObject toJsonOjbect(Object obj){
  25. JsonConfig jsonConfig = new JsonConfig();
  26. jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//可防止hibernate模式下的关联关系子对象中包含父对象造成死循环
  27. JSONObject jsonObject = JSONObject.fromObject(obj,jsonConfig);
  28. return jsonObject;
  29. }
  30.  
  31. /**
  32. * 转成jsonArray对象
  33. * @param obj
  34. * @return
  35. */
  36. public static JSONArray toJsonArray(Object obj){
  37. JsonConfig jsonConfig = new JsonConfig();
  38. jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);//可防止hibernate模式下的关联关系子对象中包含父对象造成死循环
  39. JSONArray jsonArray = JSONArray.fromObject(obj,jsonConfig);
  40. return jsonArray;
  41. }
  42.  
  43. /**
  44. * json串或jsonobject对象转成Map
  45. * @param obj
  46. * @return
  47. */
  48. public static Map<?, ?> jsonToMap(Object obj){
  49. JSONObject jsonObject = null;
  50. if(obj instanceof JSONObject){
  51. jsonObject = (JSONObject)obj;
  52. }else{
  53. jsonObject = JSONObject.fromObject(obj);
  54. }
  55.  
  56. Map<Object, Object> map = new HashMap<Object, Object>(jsonObject.size());
  57. Iterator<?> it = jsonObject.keys();
  58. while(it.hasNext()){
  59. Object key = it.next();
  60. Object value = jsonObject.get(key);
  61. if(value instanceof JSONObject){
  62. map.put(key, jsonToMap(value));
  63. }else if(value instanceof JSONArray){
  64. map.put(key, jsonArrToList(value));
  65. }else{
  66. map.put(key, value);
  67. }
  68. }
  69.  
  70. return map;
  71. }
  72.  
  73. /**
  74. * list串或jsonArray对象转成list
  75. * @param obj
  76. * @return
  77. */
  78. public static List<?> jsonArrToList(Object obj){
  79.  
  80. JSONArray jsonArray = null;
  81. if(obj instanceof JSONArray){
  82. jsonArray = (JSONArray)obj;
  83. }else{
  84. jsonArray = JSONArray.fromObject(obj);
  85. }
  86.  
  87. List list = new ArrayList(jsonArray.size());
  88. Iterator<?> it = jsonArray.iterator();
  89. while(it.hasNext()){
  90. Object next = it.next();
  91. if(next instanceof JSONObject){
  92. list.add(jsonToMap(next));
  93. }else if(next instanceof JSONArray){
  94. list.add(jsonArrToList(next));
  95. }else{
  96. list.add(next);
  97. }
  98. }
  99.  
  100. return list;
  101. }
  102.  
  103. /**
  104. * json串转java对象
  105. * @param jsonStr json串
  106. * @param rootClass 要转成的主对象
  107. * @param subClassMap 主对象中包含的list类型的属性Map 格式:subClassMap.put("iordersegments", IorderSegment.class); key是子对象在主对象中的属性名, value是子对象类型
  108. * @return
  109. */
  110. public static <T>T jsonToBean(String jsonStr,Class<T> rootClass,Map<String, Class> subClassMap){
  111. JsonConfig filterNullConfig = new JsonConfig();
  112. //过滤掉参数值为null的参数,防止后边的时间转换出错
  113. filterNullConfig.setJsonPropertyFilter(new PropertyFilter() {
  114. @Override
  115. public boolean apply(Object clazz, String name, Object value) {
  116. boolean isFilter = false;
  117. if(value==null||"".equals(value)){
  118. isFilter = true;
  119. }
  120. return isFilter;
  121. }
  122. });
  123.  
  124. JSONObject jsonObject = JSONObject.fromObject(jsonStr,filterNullConfig);
  125.  
  126. String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd","yyyy-MM-dd HH:mm"};//不过好像只有 yyyy-MM-dd HH:mm:ss 格式有效
  127. JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
  128.  
  129. JsonConfig jsonConfig = new JsonConfig();
  130. jsonConfig.setRootClass(rootClass);
  131. if(subClassMap!=null&&subClassMap.size()>0){
  132. jsonConfig.setClassMap(subClassMap);
  133. }
  134.  
  135. return (T)JSONSerializer.toJava(jsonObject, jsonConfig);
  136. }
  137.  
  138. }

自己封装的json工具类的更多相关文章

  1. 用jackson封装的JSON工具类

    package hjp.smart4j.framework.util; import com.fasterxml.jackson.databind.ObjectMapper; import org.s ...

  2. Spring统一返回Json工具类,带分页信息

    前言: 项目做前后端分离时,我们会经常提供Json数据给前端,如果有一个统一的Json格式返回工具类,那么将大大提高开发效率和减低沟通成本. 此Json响应工具类,支持带分页信息,支持泛型,支持Htt ...

  3. HttpClientUntils工具类的使用测试及注意事项(包括我改进的工具类和Controller端的注意事项【附 Json 工具类】)

    HttpClient工具类(我改过): package com.taotao.httpclient; import java.io.IOException; import java.net.URI; ...

  4. 免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作简易流量爬虫

    前言 我们之前的爬虫都是模拟成浏览器后直接爬取,并没有动态设置IP代理以及UserAgent标识,本文记录免费IP代理池定时维护,封装通用爬虫工具类每次随机更新IP代理池跟UserAgent池,并制作 ...

  5. springboot封装JsonUtil,CookieUtil工具类

    springboot封装JsonUtil,CookieUtil工具类 yls 2019-9-23 JsonUtil public class JsonUtil { private static Obj ...

  6. 从接口自动化测试框架设计到开发(二)操作json文件、重构json工具类

    用例模板里的请求数据多,看起来很乱,所以可以通过访问另外一个文件的方式获取请求数据 把请求数据都放在一个json文件中 取出login的内容: import json fp = open('G:/un ...

  7. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

  8. Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加

    package com.aherp.framework.util; import java.lang.reflect.Array;import java.lang.reflect.Method;imp ...

  9. Json工具类 - JsonUtils.java

    Json工具类,提供Json与对象之间的转换. 源码如下:(点击下载 - JsonUtils.java . gson-2.2.4.jar ) import java.lang.reflect.Type ...

随机推荐

  1. phpmyadmin任意文件包含漏洞分析(含演示)

    0x01 漏洞描述 phpmyadmin是一款应用非常广泛的mysql数据库管理软件,基于PHP开发. 最新的CVE-2014-8959公告中,提到该程序多个版本存在任意文件包含漏洞,影响版本如下: ...

  2. Hibernate的基本查询语句

    1.最简单的查询 List<Special> specials = (List<Special>)session.createQuery("select spe fr ...

  3. [转]nls_lang设置

    1. NLS_LANG 参数组成NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characters ...

  4. 使用JDBC批量保存数据(JdbcDaoSupport,JdbcTemplete)

    最近做的一个项目中用到了Hibernate的,然后数据库批量插入数据的时候就使用到了hibernate的批处理,但是效率比较低,看网上说还有一些限制,要禁止二级缓存,还要多一个batch_size的配 ...

  5. css 字体超出隐藏

    height: 55px white-space: nowrap; overflow: hidden; text-overflow: ellipsis;

  6. java类集框架图(google找的,备个份)

  7. javaBean Request生命周期

    request: 在request范围内,JavaBean对象的有效范围为: ① 客户请求访问的当前JSP页面② 和当前JSP页面共享同一个请求的页面,包括<%@ include%>指令以 ...

  8. html5 调用摄像头

    ---移动设备--- <input type="file" capture="camera" accept="image/*" id= ...

  9. Android课程---Android设置透明效果的三种方法(转)

    1.使用Android系统自带的透明效果资源 <Button  android:background="@android:color/transparent"/>   ...

  10. Android课程---帧布局 FrameLayout

    帧布局的特点是: 1.多个组件,层叠显示 2.所占位置和大小由组件决定 示例代码: <?xml version="1.0" encoding="utf-8" ...