json-lib JsonUtils 工具类,json-lib 工具类
================================
©Copyright 蕃薯耀 2018年6月26日
http://fanshuyao.iteye.com/
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.sf.ezmorph.Morpher; import net.sf.ezmorph.MorpherRegistry; import net.sf.ezmorph.bean.BeanMorpher; import net.sf.ezmorph.object.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; import net.sf.json.util.JSONUtils; public class JsonUtils { @SuppressWarnings("unchecked") public static <T> T toClass(String json, Class<T> clazz){ return (T) JSONObject.toBean(JSONObject.fromObject(json), clazz); } public JsonUtils() { } public static String toJson(Object obj) { String s = "{}"; if (obj == null) { return s; } if (!(obj instanceof Collection) && !(obj.getClass().isArray()) && !(obj instanceof JSONArray)) { s = JSONObject.fromObject(obj, config).toString(); } else { s = JSONArray.fromObject(obj, config).toString(); } return s; } /** * json转换成Bean,clazz指定的整个json转换的类型 * 如果这个bean里面还有其他自定义类型(List,Array不包括,会自动转换)不知道如何转换只能用MorphDynaBean * 解决办法请看jsonToBean(String s, Class clazz, Map map)中的map来指定类型 * jsonToBean只适合JsonObject,isArray为true不满足,json形式最外层为{}而不能为[] */ public static Object jsonToBean(String s, Class<?> clazz) { return jsonToBean(s, clazz, null); } public static Object jsonToBean(String s, Class<?> clazz, Map<String,?> typemap) { return trans2Bean(JSONObject.fromObject(s), clazz, typemap); } private static Object trans2Bean(JSONObject jsonobject, Class<?> class1, Map<String,?> map) { return JSONObject.toBean(jsonobject, class1, map); } /** * 将MorphDynaBean类型的对象转换成指定的类型对象 */ public static Object translateMorphDynaBean(Class<?> outclazz, Object obj) { MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry(); Morpher dynaMorpher = new BeanMorpher(outclazz,morpherRegistry); morpherRegistry.registerMorpher(dynaMorpher); return morpherRegistry.morph(outclazz,obj); } @SuppressWarnings("rawtypes") public static List jsonArrayToList(String json) { return JSONArray.fromObject(json); } /** * 将最外层为[]的json转换成List对象 * jsonToBean只适合json最外层为{}形式 * 可以指定class,里面元素形式为{} 将元素转换成指定类型 [{},{}] * 但是要求里面元素必须是{}包含,如果如[[],[]]json形式不适合JsonObject */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static List jsonArrayToList(String json, Class clazz) { if (json == null || "".equals(json)) { return null; } if (clazz == null) { return JSONArray.fromObject(json); } List arraylist = new ArrayList(); for (Iterator iterator = JSONArray.fromObject(json).iterator(); iterator.hasNext(); ) { arraylist.add(trans2Bean(((JSONObject) iterator.next()), clazz, null)); }; return arraylist; } @SuppressWarnings({ "unchecked", "rawtypes" }) public static List jsonArrayToList(String json,Class clazz, Map mapType) { if (json == null || "".equals(json)) { return null; } if (clazz == null) { return JSONArray.fromObject(json); } List arraylist = new ArrayList(); for (Iterator iterator = JSONArray.fromObject(json).iterator(); iterator.hasNext(); ) { arraylist.add(trans2Bean(((JSONObject) iterator.next()), clazz, mapType)); }; return arraylist; } /** * jsonToMap可以用jsonToBean来代替 * @param s * @return */ @SuppressWarnings("rawtypes") public static Map jsonToMap(String json) { return JSONObject.fromObject(json); } @SuppressWarnings({ "unchecked", "rawtypes" }) public static Map jsonToMap(String json, Class class1) { if(json == null || "".equals(json)) { return null; } JSONObject jsonobject = JSONObject.fromObject(json); HashMap hashmap = new HashMap(); String s1 = null; for (Iterator iterator = jsonobject.keys(); iterator.hasNext(); ) { s1 = (String) iterator.next(); hashmap.put(s1,trans2Bean(jsonobject.getJSONObject(s1), class1, null)); } return hashmap; } @SuppressWarnings({ "unchecked", "rawtypes" }) public static Map jsonToMap(String json, Class class1, Map map) { if(json == null || "".equals(json)) { return null; } JSONObject jsonobject = JSONObject.fromObject(json); HashMap hashmap = new HashMap(); String s1; for (Iterator iterator = jsonobject.keys(); iterator.hasNext(); ) { s1 = (String) iterator.next(); hashmap.put(s1,trans2Bean(jsonobject.getJSONObject(s1), class1, map)); } return hashmap; } public static String escape(String s) { Pattern pattern = Pattern.compile("[\\\\|'|\\r|\\n]"); Matcher matcher = pattern.matcher(s); StringBuffer stringbuffer = new StringBuffer(); while (matcher.find()) if ("\\".equals(matcher.group())) matcher.appendReplacement(stringbuffer, "\\\\\\\\"); else if ("'".equals(matcher.group())) matcher.appendReplacement(stringbuffer, "\\\\'"); else if ("\r".equals(matcher.group())) matcher.appendReplacement(stringbuffer, "\\\\r"); else if ("\n".equals(matcher.group())) matcher.appendReplacement(stringbuffer, "\\\\n"); matcher.appendTail(stringbuffer); return stringbuffer.toString(); } private static final JsonConfig config; static { config = new JsonConfig(); //使用jsonConfig的setCycleDetectionStrategy()方法进行忽略死循环。 //bK.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); //需要注意的是完整的放到最前面,如果简单的放到前面,匹配范围变大了如:yyyy-MM-dd 匹配2012-05-21 13:13:11 JSONUtils.getMorpherRegistry() .registerMorpher(new DateMorpher(new String[] {"yyyy-MM-dd HH:mm:ss","yyyy-MM-dd"})); //时间如java.sql.Date的处理 config.registerJsonValueProcessor(java.sql.Date.class, new DateJsonValueProcessor("yyyy-MM-dd")); //时间为java.util.Date处理 config.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); //时间为java.sql.Timestamp处理 config.registerJsonValueProcessor(java.sql.Timestamp.class, new DateJsonValueProcessor("yyyy-MM-dd HH:mm:ss")); //时间为java.math.BigDecimal处理 config.registerJsonValueProcessor(java.math.BigDecimal.class, new NumberJsonValueProcessor()); } // 时间转换内部类 public static class DateJsonValueProcessor implements JsonValueProcessor { private static final String defaultFormat = "yyyy-MM-dd"; private DateFormat dataFormat; // 构造函数 public DateJsonValueProcessor() { dataFormat = new SimpleDateFormat(defaultFormat); } public DateJsonValueProcessor(String s) { dataFormat = new SimpleDateFormat(s); } //如果是List<Date>类型,这里面obj值得是集合一个元素Date public Object processArrayValue(Object obj, JsonConfig jsonconfig) { return process(obj); } @Override public Object processObjectValue(String s, Object obj, JsonConfig jsonconfig) { return process(obj); } //如果是java.sql.Date类型,这里强转是否会存在问题 //这里因为Date是java.util.Date类型,java.sql.Date是java.util.Date的子类 //自动向上转型可以知道,这里强转是合理的 private Object process(Object obj) { return obj != null ? dataFormat.format((Date)obj) : ""; } } //BigDecimal转换为Json发生截断 处理 public static class NumberJsonValueProcessor implements JsonValueProcessor { @Override public Object processArrayValue(Object obj, JsonConfig jsonconfig) { return process(obj); } @Override public Object processObjectValue(String s, Object obj, JsonConfig jsonconfig) { return process(obj); } private Object process(Object obj) { return obj != null ? obj.toString() : ""; } } }
(如果你觉得文章对你有帮助,欢迎捐赠,^_^,谢谢!)
================================
©Copyright 蕃薯耀 2018年6月26日
http://fanshuyao.iteye.com/
相关推荐
总的来说,JSON-lib是一个实用的工具,它简化了Java开发者在XML和JSON数据格式之间的转换工作,提高了开发效率,尤其是在构建Web服务和进行数据交换的场景下。虽然现在有更现代的库可供选择,但在某些情况下,JSON-...
此外,json-lib还提供了`JSONArray`类来处理JSON数组,以及`JSONUtils`工具类,提供了一些便捷的转换方法。 在实际开发中,json-lib常用于服务器与客户端的数据交互,比如Web服务接口的数据响应。例如,当一个Web ...
6. **NetJSONSerializer**: 序列化Java对象到JSON的工具类,可以处理复杂对象结构。 使用`json-lib`进行JSON操作的一般步骤如下: 1. 创建或获取JSON对象:你可以通过`JSONObject.fromObject()`将Java对象转换为...
在Java开发中,Gson和json-lib都是处理JSON数据的有效工具。选择哪个取决于具体项目的需求,比如性能、易用性、社区支持等因素。这两个库都提供了丰富的API和功能,可以满足大多数JSON操作需求。了解并熟练掌握它们...
总结来说,Java JSON API,特别是`json-lib`库,是Java开发者处理JSON数据的一个重要工具。它提供了一系列方便的API,使得JSON的创建、解析、转换变得简单,同时与其他数据格式如XML的交互也十分便捷。在理解并熟练...
为了更好地利用`json-lib`,你需要了解其核心类,如`JSONObject`、`JSONArray`、`JSONUtils`等,以及它们提供的各种方法。此外,对于复杂的Java对象,可能需要使用注解或适配器来控制序列化和反序列化的细节。 总的...
- json-lib允许用户自定义序列化和反序列化的策略,以便处理特定的Java类或对象。 在实际开发中,我们通常会通过以下步骤使用json-lib: 1. **添加依赖:** 首先,在项目中引入json-lib的JAR包。如果使用的是...
例如,`commons-beanutils-1.8.3.jar`是该库的一个版本,它包含了用于操作JavaBean的各种工具类。BeanUtils库可以帮助开发者轻松地读取和设置JavaBean的属性,这对于JSON数据与Java对象的转换过程非常重要,因为JSON...
当然了,现在对于“将查询数据库得到的结果集resultRest转换为JsonArray”已经有很多json的库来解决了,譬如json-lib、gson、jackson、fastjson等等,本文介绍的正是json-lib这种比较纯洁的库来处理resultSet,晚点...
`JsonUtils.java`可能是你自定义的一个工具类,用于封装JSON操作,比如提供方便的方法来解析或生成JSON。你可以定义一些静态方法,如`parseJson(String jsonStr)`和`toJson(Object obj)`,以简化开发。 `...
4. **自动映射和转换**:`net.sf.json.util.JSONUtils`类包含了一些静态方法,可以自动将JSON对象映射为JavaBean或Map,反之亦然,极大地简化了JSON与Java对象间的转换。 5. **JSON与XML互转**:`net.sf.json.XML`...
在提供的代码示例中,JsonUtils类提供了formatJson方法,该方法可以将对象按照指定的规则转换成格式化的JSON字符串。 关于文档中提到的常见错误处理,虽然内容有所缺失,但不难推测,错误处理可能包括但不限于JSON...
本文档主要介绍了两个Java工具类——JsonUtilsForJsonLib和JsonUtils,它们能够帮助我们将Java对象转换成JSON对象或字符串,以适应Ext框架对AJAX和JSON数据的需求。 JsonUtilsForJsonLib类依赖于官方提供的JSON库,...
Apache Commons Lang提供了一个简单的JSON工具类,可以用来将Java对象转换为JSON字符串,但其功能相比其他专业JSON库较为有限。 6. **Fastjson** 阿里巴巴提供的Fastjson库是一个高性能的JSON库,支持Java对象与...
例如,通过JSON Lib的`JSONObject`和`JSONArray`类可以轻松地创建和操作JSON结构,而`JsonUtils`类则可以帮助将Java对象转换为JSON字符串,反之亦然。此外,借助其他库如BeanUtils,可以方便地将JSON对象映射到...
json-lib库提供的工具函数可以帮助开发者快速解决这类问题,提高代码的可读性和维护性。同时,理解如何处理特殊字符也是提升Web应用健壮性的重要一环。 总之,使用json-lib库在Java中处理含特殊字符的JSON数据是一...
4. **Apache Commons JSON** - Apache软件基金会的Commons Lang项目包含了处理JSON的工具,如`JSONUtils`和`JSONException`。 5. **JsonSimple** - 这是一个简单易用的JSON库,适合小型项目或对性能要求不高的场景...
添加到类路径中,这可以通过IDE的依赖管理工具(如Maven或Gradle)或者手动复制到项目的lib目录下完成。 - 创建JSON对象:你可以创建`JSONObject`或`JSONArray`实例,并通过键值对或数组元素进行填充。 - 序列化与...