3

我有一个List<Person>清单。我想使用 Jackson Api 将其序列化为具有其他一些属性的 JSON。

输出应该是这样的:

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

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

可能很简单,但无法从杰克逊的 Api 中弄清楚。谢谢

4

2 回答 2

3

我将创建一个名为 PersonGroup 的新类,其中包含您需要的任何额外字段,并将 List 作为此类的另一个字段 - 例如,您提供的该字段将命名为 aaData。

这将代表您在这里的结构。如果您认为一个新类太多了,那么您可以制作一个对象的 HashMap 并将额外的字段存储为您喜欢的任何对象,然后将它们添加到 HashMap,确保键与额外字段的名称匹配并确保您的列表也在 HashMap 中。

反序列化此类或 HashMap 应返回您提到的输出。

于 2012-09-24T12:32:43.250 回答
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;
    }
}
于 2012-09-24T13:33:31.553 回答