您的位置:首页 > 编程语言 > Java开发

自制java一个json字符串生产,虽然有很多bug,还是分享一下

2013-10-05 00:00 567 查看
摘要: 由于,使用org.json包,在使用hibernate 利用 annotation 注释一个实体类,但是对应一对多的时候,利用JSONObject生成json字符串报错,于是,就弄了一个自己方便的json生产串

package web.test.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import web.test.model.User;
public class JsonObject {
// 存储对象
Object object;
// 获取类对象
private Class<?> clazz;
// 获取类的Field
private Field[] fields = null;
// 设置过滤的属性类型
private String[] excludeField = null;
// 过滤的属性个数
private int excludeNumber;
// 无参构造方法
public JsonObject() {
}
//对象构造
public JsonObject(Object obj) throws Exception {
object = obj;
clazz = obj.getClass();
fields = clazz.getDeclaredFields();
excludeField = new String[fields.length];
excludeNumber = 0;
}
/**
* 给类附加对象
*
* @param obj
*/
public void setClassObject(Object obj) throws Exception {
object = obj;
clazz = obj.getClass();
fields = clazz.getDeclaredFields();
excludeField = new String[fields.length];
excludeNumber = 0;
}
/**
* 设置过滤的属性
*
* @param fieldType
*/
public void setExcludeField(String fieldType) {
try {
if (fieldType.equals("int") || fieldType.equals("Integer")) {
excludeField[excludeNumber++] = "INT";
} else if (fieldType.equals("String")) {
excludeField[excludeNumber++] = "STRING";
} else if (fieldType.equals("Set") || fieldType.equals("HashSet")) {
excludeField[excludeNumber++] = "SET";
} else if (fieldType.equals("List")
|| fieldType.equals("ArrayList")) {
excludeField[excludeNumber++] = "LIST";
} else if (fieldType.equals("long") || fieldType.equals("Long")) {
excludeField[excludeNumber++] = "LONG";
} else if (fieldType.equals("float") || fieldType.equals("Float")) {
excludeField[excludeNumber++] = "FLOAT";
} else if (fieldType.equals("double") || fieldType.equals("Double")) {
excludeField[excludeNumber++] = "DOUBLE";
}
} catch (Exception e) {
new Exception("超过了排除列表,至少留一个属性");
}
}
/**
* 对应对象构造方法
* @return
* @throws Exception
*/
public String getJsonString() throws Exception {
return getJson(clazz, object);
}
/**
* 对应无参构造方法
* @param obj
* @return
* @throws Exception
*/
public String getJsonString(Object obj) throws Exception {
Class<?> clazz = obj.getClass();
return getJson(clazz, obj);
}
/**
* 递归获取数据
* @param clazz
* @param obj
* @return
* @throws Exception
*/
public String getJson(Class<?> clazz,Object obj)throws Exception{
Field[] fields = clazz.getDeclaredFields();
StringBuffer sb = new StringBuffer();
sb.append("{");

for (int i = 1; i < fields.length; i++) {
boolean flag = true;
for (int j = 0; j < excludeField.length; j++) {
if (excludeField[j] == null)
break;
if (fields[i].getType().toString().toUpperCase().indexOf(
excludeField[j]) != -1) {
flag = false;
break;
}
}
if (flag == false)
continue;
String temp = "get"
+ fields[i].getName().substring(0, 1).toUpperCase()
+ fields[i].getName().substring(1);

Method m = clazz.getMethod(temp, new Class[] {});
Object value = m.invoke(obj, new Object[] {});
String type
3ff0
= fields[i].getType().toString().toUpperCase() ;
if (type.indexOf("INT") != -1||type.indexOf("FLOAT")!=-1||type.indexOf("DOUBLE")!=-1) {
sb.append("\"" + fields[i].getName() + "\":"+value+",");
}else if(type.indexOf("STRING")!=-1){
sb.append("\""+fields[i].getName()+"\":\""+value+"\",") ;
}else{
//判断是否还有实体类
if(type.indexOf("CLASS")!=-1){
sb.append("\""+fields[i].getName()+"\":"+getJsonString(value)+",") ;
}
}
}
return sb.toString().substring(0, sb.length()-1)+"}";
}
/**
* 测试方法
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
User user = new User();
user.setId(1);
user.setSuser(null);
user.setAge(21);
user.setName("legal");
user.setPass("123456");
user.setSex("femal");
user.setRuser(null);
JsonObject json = new JsonObject(user);
json.setExcludeField("Set");
System.out.println(json.getJsonString());
}
}
欢迎各位指出一些bug,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息