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"
        },
    ...
    ]
}

おそらく非常に単純ですが、JacksonのApiからは理解できませんでした。ありがとう

4

2 に答える 2

3

このクラスの別のフィールドとしてリストを使用して必要な追加フィールドのいずれかを持つPersonGroupという新しいクラスを作成します。たとえば、このフィールドに指定した例では、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 に答える