2012-09-24 47 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; 
    } 
}