Java - 反射 - 转换为JSON数组

时间:2013-04-29 09:30:06

标签: java json

我在java

中创建和设置如下的值
public Class creatObjectWithDefaultValue(String className) throws IllegalArgumentException, IllegalAccessException {
        DefaultParamValues defaultParamValues = null;
        Class objectClass = null;
        try {
            objectClass = Class.forName(className);
             Field[] fields = objectClass.getClass().getDeclaredFields();

             for(Field f:fields){
                    if(!f.isAccessible()){
                        f.setAccessible(true);
                        Class<?> type = f.getType();

                        if(type.equals(Integer.class)){
                            f.set(objectClass, defaultParamValues.INTEGER);  
                        } else if(type.equals(BigInteger.class)){
                            f.set(objectClass, defaultParamValues.BIGINTEGER);  
                        }else if(type.equals(LocalDate.class)){
                            f.set(objectClass, defaultParamValues.DATE);  
                        }else if(type.equals(Boolean.class)){
                            f.set(objectClass, defaultParamValues.BOOLEAN);  
                        }else if(type.equals(Long.class)){
                            f.set(objectClass, defaultParamValues.LONGVALUE);  
                        }
                        f.setAccessible(false);
                    }
                    //System.out.println(f.get(objectClass));
                }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return objectClass;
    }

现在我想将返回对象转换为JSON or JSON Array我尝试过这样的事情,但它会抛出异常The constructor JSONObject(Class) is undefined

System.out.println ( new JSONObject( te.creatObjectWithDefaultValue("com.hexgen.ro.request.CreateRequisitionRO") ).toString () );

请帮我纠正错误。

最好的问候

3 个答案:

答案 0 :(得分:2)

为什么不使用Jackson来处理JSON数据?重新发明轮子通常容易出错,仅适用于教育或没有适合您目的的图书馆或框架的情况。

现在,对于 JSON&lt; - &gt;对象转换,没有一个理由不使用更高级别的框架,除非您明确尝试调查Reflection本身。

答案 1 :(得分:1)

JSONObject中没有带参数类的构造函数。

但您可以创建该类的对象并将其传递给jsonobject构造函数:

System.out.println ( new JSONObject(te.creatObjectWithDefaultValue("com.hexgen.ro.request.CreateRequisitionRO").newInstance() ).toString () );

这仅适用于具有无参数构造函数的类

答案 2 :(得分:1)

这很清楚。

The constructor JSONObject(Class) is undefined

API→http://www.json.org/javadoc/org/json/JSONObject.html