如何将Java Bean转换为JsonObject?

问题描述 投票:0回答:2

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

As the image shows

添加org.json依赖项后,下面是它如何显示。

java json javabeans
2个回答
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>

Gradle依赖

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

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


0
投票

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.