2012-09-24 80 views
3

我有一個List<Person>列表。 我想用Jackson Api將它序列化爲JSON和其他一些屬性。使用Jackson創建JSON

輸出應該是這樣的:

{ 
    "sEcho": 3, 
    "iTotalRecords": 10, 
    "iTotalDisplayRecords": 10, 
    "aaData": [ <--here's the persons 
     { 
      "name": "TestName1", 
      "status": "ok" 

     }, 
     { 
      "name": "TestName2", 
      "status": "ok" 
     }, 
    ... 
    ] 
} 

也許很簡單,但無法從傑克遜的API看着辦吧。 謝謝

回答

3

我會創建一個名爲PersonGroup的新類,它有任何你需要的額外字段作爲這個類的另一個字段 - 對於你給這個字段的例子將被命名爲aaData。

這將代表您在此處的結構。如果你認爲一個新類太多,那麼你可以創建一個對象的HashMap並將額外的字段存儲爲你喜歡的任何對象,然後將它們添加到HashMap中,確保這些鍵匹配額外字段的名稱並確保你的List也在HashMap中。

反序列化這個類或HashMap應該返回你提到的輸出。

+0

我喜歡你的想法,等待其他建議。謝謝 – braincell

0

試試這個。 希望它會有所幫助。

import java.util.ArrayList; 
import java.util.List; 

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 

public class JsonSimpleExample { 
    public static void main(String[] args) { 

     List<Person> personList = new ArrayList<Person>(); 

     for(int i=0 ;i< 5;i ++) { 

      Person person = new Person("TestName" + (i+1), "OK"); 
      personList.add(person); 
     } 

     JSONObject obj = new JSONObject(); 
     obj.put("sEcho", 3); 
     obj.put("iTotalRecords", 10); 
     obj.put("iTotalDisplayRecords", 10); 

     JSONArray list = new JSONArray(); 

     for (Person person : personList) { 
      JSONObject innerObj = new JSONObject(); 
      innerObj.put("name",person.getName()); 
      innerObj.put("status",person.getStatus()); 
      list.add(innerObj); 
     } 
     obj.put("aaData", list); 

     System.out.print(obj); 
    } 
} 
class Person { 
    private String name; 
    private String status; 

    public Person(String name, String status) { 
     this.name = name; 
     this.status = status; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 
}