如何将Java Bean转换为JsonObject?

时间:2019-03-07 05:57:27

标签: java json javabeans

我知道包JsonObject中的org.json可以创建一个JsonObject 一个构造函数,其参数是一个对象,但是我在Eclipse中找不到它。

As the image shows

添加了org.json依赖项之后,下面是它的显示方式。

2 个答案:

答案 0 :(得分:1)

之所以看不到该构造函数,是因为您使用的JSONObject类来自android-json包。您可以在Android JSONObject doc中看到相同的构造函数。

要获得您期望的JSONObject,您需要添加org.json的依赖项,如下所示(Maven或Gradle)

Maven依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

等级依赖性

compile group: 'org.json', name: 'json', version: '20180813'

然后导入这个 JSONObject类,您将看到您真正想要的构造函数。

答案 1 :(得分:0)

您可以使用以下方法将Java bean对象转换为JSON对象。我添加了一些数据类型,还使用了通用格式将其添加到json对象中。您可以自定义愿望。您只想将对象引用传递给此方法。

private JSONObject beanToJSON(Object bean) {
    JSONObject json = new JSONObject();

    try {
        Field[] fields = bean.getClass().getDeclaredFields();
        System.out.println(fields.length);

        for (Field f : fields) {
            String field = f.getName();
            Class params[] = {};
            Object paramsObj[] = {};

            Method method = bean.getClass().getDeclaredMethod("get" + StringUtils.capitalise(field), params);
            Object v = method.invoke(bean, paramsObj);

            Class t = f.getType();

            if (t == boolean.class && Boolean.FALSE.equals(v)) {
                json.accumulate(field, v.toString());

            } else if (t.isPrimitive() && ((Number) v).doubleValue() == 0) {
                json.accumulate(field, v.toString());

            } else if (t.isPrimitive() && ((Number) v).intValue() == 0) {
                json.accumulate(field, v.toString());

            } else if (t == String.class) {
                json.accumulate(field, v.toString());
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return json;
}