JSON 转化为java对象


JSON做为一种轻量级数据交换工具,使用是很是方便的。但在同J2EE后台交互的时候,须要将JSON直接转化为咱们工程中的java持久对象经行业务操做或直接持久化到数据库。如今有不少这种数据转化工具,咱们项目中使用了JSON-tool第三包,使用的步骤为: java

1. 接受前台json数据 数据库

String data = request.getParameter("data"); json

2. 经过接收到的json数据构建一个JSONObject或是一个JSONArray
JSONObject json = new JSONObject(data); app

3. 经过JSONMapper的tojava()方法将JSONObject转化为咱们须要的对象。 工具

    但在处理的过程当中,若是遇到主外键关联的时候很很差处理,容易出错,因此就想到了根据java的反射
机制动态去转化JSON对象为pojo对象。 测试

private Object fromJsonToJava(JSONObject json,Class pojo) 
        throws Exception{
        // 首先获得pojo所定义的字段
        Field [] fields = pojo.getDeclaredFields();
        // 根据传入的Class动态生成pojo对象
        Object obj = pojo.newInstance();
        for(Field field: fields){
            // 设置字段可访问(必须,不然报错)
            field.setAccessible(true);
            // 获得字段的属性名
            String name = field.getName();
            // 这一段的做用是若是字段在JSONObject中不存在会抛出异常,若是出异常,则跳过。
            try{
                    json.get(name);
            }catch(Exception ex){
                continue;
            }
            if(json.get(name) != null && !"".equals(json.getString(name))){
                // 根据字段的类型将值转化为相应的类型,并设置到生成的对象中。
                if(field.getType().equals(Long.class) || field.getType().equals(long.class)){
                    field.set(obj, StringUtil.parseLong(json.getString(name)));
                }else if(field.getType().equals(String.class)){
                    field.set(obj, json.getString(name));
                } else if(field.getType().equals(Double.class) || field.getType().equals(double.class)){
                    field.set(obj, StringUtil.parseDouble(json.getString(name)));
                } else if(field.getType().equals(Integer.class) || field.getType().equals(int.class)){
                    field.set(obj, StringUtil.parseInt(json.getString(name)));
                } else if(field.getType().equals(java.util.Date.class)){
                    field.set(obj, DateTimeUtil.stringToDate(json.getString(name), "yyyy-MM-dd"));
                }else{
                    continue;
                }
            }
        }
        return obj;
    } 优化

大功告成,粗略测试,成功。单在有住外键的状况下,仍是没有处理。 对象

改天在优化一下这个程序。 get

相关文章
相关标签/搜索