1. 程式人生 > >JSON工具類,物件轉JSON

JSON工具類,物件轉JSON

基於每次都要寫類似這樣:

JSONArray arr = new JSONArray();
Iterator<Campus> it = list.iterator();
while (it.hasNext()) {
	Campus campus = (Campus) it.next();
	JSONObject json = new JSONObject();
	json.put("id", campus.getId());
	json.put("name", campus.getName());
	json.put("address", campus.getAddress());
	json.put("remark", campus.getRemark());
	arr.add(json);
	}

特此寫個工具類:

結果:

[{"java.lang.Integer":1},{"java.lang.Integer":2},{"java.lang.Integer":3}]
[{"id":3,"title":"鬥破蒼穹","price":3.3,"publishDate":1527312754008},{"id":3,"title":"鬥破蒼穹","price":3.3,"publishDate":1527312754008},{"id":3,"title":"鬥破蒼穹","price":3.3,"publishDate":1527312754008}]

程式碼:

public class ObjToJson {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		
		List<Book> list2 = new ArrayList<>();
		Book b = new Book();
		b.setId(1);
		list2.add(b);
		b.setId(2);
		b.setPrice(2.2);
		list2.add(b);
		b.setId(3);
		b.setPrice(3.3);
		b.setPublishDate(new Date());
		b.setTitle("鬥破蒼穹");
		list2.add(b);
		
		JSONArray arr = JSONPut(list);
		System.out.println(arr);
		JSONArray arr2 = JSONPut(list2);
		System.out.println(arr2);
	}
	
	public static JSONArray JSONPut(List<?> list){
		JSONArray arr = new JSONArray();
		for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
			Object object = (Object) iterator.next();
			//org.json
			//arr.put(JSONPut(object));
			arr.add(JSONPut(object));
		}
		return arr;
	}
	
	public static JSONObject JSONPut(Object obj){
		JSONObject json = new JSONObject();
		String[] values = getFiledName(obj);
		//基本資料型別
		if("java.lang".equals(obj.getClass().getName().substring(0,9))){
			json.put(obj.getClass().getName(),obj);
			return json;
		}
		for (int i = 0; i < values.length; i++) {
			json.put(values[i], getFieldValueByName(values[i], obj));
		}
		return json;
	}
	
	/** 
	 * 根據屬性名獲取屬性值 
	 * */  
	   private static Object getFieldValueByName(String fieldName, Object o) {  
	       try {    
	           String firstLetter = fieldName.substring(0, 1).toUpperCase();    
	           String getter = "get" + firstLetter + fieldName.substring(1);    
	           Method method = o.getClass().getMethod(getter, new Class[] {});    
	           Object value = method.invoke(o, new Object[] {});    
	           return value;    
	       } catch (Exception e) {    
	           e.getMessage();    
	           return null;    
	       }    
	   }   
	     
	   /** 
	    * 獲取屬性名陣列 
	    * */  
	   private static String[] getFiledName(Object o){  
	    Field[] fields=o.getClass().getDeclaredFields();  
	        String[] fieldNames=new String[fields.length];  
	    for(int i=0;i<fields.length;i++){  
	        fieldNames[i]=fields[i].getName();  
	    }  
	    return fieldNames;  
	   }
}

用的是fastjson;

測試的book類:

public class Book implements Serializable{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
     * 編號
     */
    private int id;
    /**
     * 書名
     */
    private String title;
    /**
     * 價格
     */
    private double price;
    /**
     * 出版日期
     */
    private Date publishDate;

    public Book(int id, String title, double price, Date publishDate) {
        this.id = id;
        this.title = title;
        this.price = price;
        this.publishDate = publishDate;
    }
    
    public Book() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public Date getPublishDate() {
        return publishDate;
    }

    public void setPublishDate(Date publishDate) {
        this.publishDate = publishDate;
    }
@Override
public String toString() {
return this.getTitle()+"---"+this.getId()+"----"+this.getPrice()+"--------";
}
}