您无法看到该构造函数的原因是因为您使用的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
类,你会看到你真正想要的构造函数。
您可以使用以下方法将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;
}