`

json-lib JsonUtils 工具类,json-lib 工具类

阅读更多

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/

1
0
分享到:
评论
1 楼 蕃薯耀 2018-06-28  
json-lib JsonUtils 工具类,json-lib 工具类

==========
蕃薯耀

相关推荐

    JSON-lib框架,转换JSON、XML不再困难

    总的来说,JSON-lib是一个实用的工具,它简化了Java开发者在XML和JSON数据格式之间的转换工作,提高了开发效率,尤其是在构建Web服务和进行数据交换的场景下。虽然现在有更现代的库可供选择,但在某些情况下,JSON-...

    json-lib学习用完整jar包

    此外,json-lib还提供了`JSONArray`类来处理JSON数组,以及`JSONUtils`工具类,提供了一些便捷的转换方法。 在实际开发中,json-lib常用于服务器与客户端的数据交互,比如Web服务接口的数据响应。例如,当一个Web ...

    json.libjar包

    6. **NetJSONSerializer**: 序列化Java对象到JSON的工具类,可以处理复杂对象结构。 使用`json-lib`进行JSON操作的一般步骤如下: 1. 创建或获取JSON对象:你可以通过`JSONObject.fromObject()`将Java对象转换为...

    gson-2.2.4.jar;jsonlib

    在Java开发中,Gson和json-lib都是处理JSON数据的有效工具。选择哪个取决于具体项目的需求,比如性能、易用性、社区支持等因素。这两个库都提供了丰富的API和功能,可以满足大多数JSON操作需求。了解并熟练掌握它们...

    java json api,json api

    总结来说,Java JSON API,特别是`json-lib`库,是Java开发者处理JSON数据的一个重要工具。它提供了一系列方便的API,使得JSON的创建、解析、转换变得简单,同时与其他数据格式如XML的交互也十分便捷。在理解并熟练...

    jsonlib依赖包

    为了更好地利用`json-lib`,你需要了解其核心类,如`JSONObject`、`JSONArray`、`JSONUtils`等,以及它们提供的各种方法。此外,对于复杂的Java对象,可能需要使用注解或适配器来控制序列化和反序列化的细节。 总的...

    json的一些jarbao

    - json-lib允许用户自定义序列化和反序列化的策略,以便处理特定的Java类或对象。 在实际开发中,我们通常会通过以下步骤使用json-lib: 1. **添加依赖:** 首先,在项目中引入json-lib的JAR包。如果使用的是...

    json帮助类

    例如,`commons-beanutils-1.8.3.jar`是该库的一个版本,它包含了用于操作JavaBean的各种工具类。BeanUtils库可以帮助开发者轻松地读取和设置JavaBean的属性,这对于JSON数据与Java对象的转换过程非常重要,因为JSON...

    json工具类

    当然了,现在对于“将查询数据库得到的结果集resultRest转换为JsonArray”已经有很多json的库来解决了,譬如json-lib、gson、jackson、fastjson等等,本文介绍的正是json-lib这种比较纯洁的库来处理resultSet,晚点...

    JSON的使用(js/java)总结

    `JsonUtils.java`可能是你自定义的一个工具类,用于封装JSON操作,比如提供方便的方法来解析或生成JSON。你可以定义一些静态方法,如`parseJson(String jsonStr)`和`toJson(Object obj)`,以简化开发。 `...

    json 学习笔记_20140116.pdf

    在提供的代码示例中,JsonUtils类提供了formatJson方法,该方法可以将对象按照指定的规则转换成格式化的JSON字符串。 关于文档中提到的常见错误处理,虽然内容有所缺失,但不难推测,错误处理可能包括但不限于JSON...

    java转json工具类说明文档.docx

    本文档主要介绍了两个Java工具类——JsonUtilsForJsonLib和JsonUtils,它们能够帮助我们将Java对象转换成JSON对象或字符串,以适应Ext框架对AJAX和JSON数据的需求。 JsonUtilsForJsonLib类依赖于官方提供的JSON库,...

    Json文件处理依赖包

    Apache Commons Lang提供了一个简单的JSON工具类,可以用来将Java对象转换为JSON字符串,但其功能相比其他专业JSON库较为有限。 6. **Fastjson** 阿里巴巴提供的Fastjson库是一个高性能的JSON库,支持Java对象与...

    json必备的jar

    例如,通过JSON Lib的`JSONObject`和`JSONArray`类可以轻松地创建和操作JSON结构,而`JsonUtils`类则可以帮助将Java对象转换为JSON字符串,反之亦然。此外,借助其他库如BeanUtils,可以方便地将JSON对象映射到...

    jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法

    json-lib库提供的工具函数可以帮助开发者快速解决这类问题,提高代码的可读性和维护性。同时,理解如何处理特殊字符也是提升Web应用健壮性的重要一环。 总之,使用json-lib库在Java中处理含特殊字符的JSON数据是一...

    json所需jar包 全 项目用

    4. **Apache Commons JSON** - Apache软件基金会的Commons Lang项目包含了处理JSON的工具,如`JSONUtils`和`JSONException`。 5. **JsonSimple** - 这是一个简单易用的JSON库,适合小型项目或对性能要求不高的场景...

    json lib net.sf.json使用的所有jar包

    4. **自动映射和转换**:`net.sf.json.util.JSONUtils`类包含了一些静态方法,可以自动将JSON对象映射为JavaBean或Map,反之亦然,极大地简化了JSON与Java对象间的转换。 5. **JSON与XML互转**:`net.sf.json.XML`...

    NetSfJsonjar

    添加到类路径中,这可以通过IDE的依赖管理工具(如Maven或Gradle)或者手动复制到项目的lib目录下完成。 - 创建JSON对象:你可以创建`JSONObject`或`JSONArray`实例,并通过键值对或数组元素进行填充。 - 序列化与...

Global site tag (gtag.js) - Google Analytics