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);
} }

自己封装的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. 解决jsp中文乱码问题

    1. 先解决响应中的乱码 何为响应中的乱码?把页面中的"username"改成"用户名"你就知道了. 所谓响应中的乱码,就是显示页面上的乱码,因为页面数据是从服 ...

  2. 导出excel时,以form方式提交json数据

    今天在写项目时写到一个excel的导出,开始想用ajax请求后台后导出,但发现ajax会有返回值,而且ajax无法直接输出文件,而后台的excel导出方法已经封装好,不方便修改. 就改用了提交的方式f ...

  3. 使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL

    一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现.也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划.D ...

  4. Windows内核 字符串基本操作

    驱动程序中字符串操作涉及到ASCII字符串.宽字符串,还有DDK定义的ANSI_STRING数据结构和UNICODE_STRING数据结构. 1)ASCII字符串和宽字符串 在应用程序中使用两种字符: ...

  5. ThinkPHP 3.2.3 中设置和使用 Session

    Session 的配置 可以在 config.php(可以是应用公用的 config.php 或模块的 config.php)中对 Session 进行配置,例如: config.php <?p ...

  6. 读过的laravel文章

    Laravel 中使用 JWT(Json Web Token) 实现基于API的用户认证 http://www.tuicool.com/articles/IRJnaa api token https: ...

  7. iOS开发UI篇—Quartz2D使用(绘制基本图形)

    iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...

  8. Python strip函数用法小结

    声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.lstrip(rm)       删除s字符串中开头处,位于 ...

  9. Construct Binary Tree from Inorder and Postorder Traversal || LeetCode

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * s ...

  10. 8 ways rich people view the world differently than the average person

    Self-made millionaire Steve Siebold spent 26 years interviewing some of the wealthiest people in the ...