如何将 Java Bean 转换为 JsonObject?
How do I convert a Java Bean to a JsonObject?
我知道包 org.json
中的 JsonObject
可以创建一个 JsonObject
参数为对象的构造函数,但我在 Eclipse 中找不到它。
添加 org.json
依赖项后,显示如下。
您看不到该构造函数的原因是因为您正在使用的 JSONObject
class 来自 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'
然后导入 this JSONObject
class 你会看到你真正想要的构造函数。
您可以使用以下方法将您的 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;
}
我知道包 org.json
中的 JsonObject
可以创建一个 JsonObject
参数为对象的构造函数,但我在 Eclipse 中找不到它。
添加 org.json
依赖项后,显示如下。
您看不到该构造函数的原因是因为您正在使用的 JSONObject
class 来自 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'
然后导入 this JSONObject
class 你会看到你真正想要的构造函数。
您可以使用以下方法将您的 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;
}