0

Java で Jackson パーサーを使用しており、 POJOの Java オブジェクトから JSON 文字列を次の形式で生成したいと考えています。どうやってやるの?

{"TOTAL":1,"CURRENTPAGE":1,"TOTALRECORDS":6,"ROWS":[{"pagename":"呼び出された getter メソッド: Test","pagestatus":"Test Status","id": 4},{"pagename":"getter メソッドを呼び出しました: getter メソッドを呼び出しました: Test","pagestatus":"Test Status","id":4},{"pagename":"getter メソッドを呼び出しました: getter メソッドを呼び出しました: Test","pagestatus":"Test Status","id":4},{"pagename":"呼び出された getter メソッド: 呼び出された getter メソッド: Test","pagestatus":"Test Status","id":4 }]}

以下のことが気に入った場合、それは機能せず、間違った出力が得られます

    Tblselectablecolumnjqgrid selCol = new Tblselectablecolumnjqgrid();
    selCol.setPageid(4);
    selCol.setPagename("Test");
    selCol.setPagestatus("Test Status");

    selList.add(selCol);
    selList.add(selCol.clone());
    selList.add(selCol.clone());
    selList.add(selCol.clone());

    ObjectMapper om = new ObjectMapper();

    String writeValueAsString = om.writeValueAsString(selList);

    System.out.println("Result:    " + writeValueAsString);

    JsonFactory jsf = new JsonFactory();

    JsonTreeWriter tree = new JsonTreeWriter();

以下の出力が得られます

[{"pagename":"呼び出された getter メソッド: Test","pagestatus":"Test Status","id":4},{"pagename":"呼び出された getter メソッド: 呼び出された getter メソッド: Test","pagestatus" :"Test Status","id":4},{"pagename":"呼び出された getter メソッド : Called getter メソッド : Test","pagestatus":"Test Status","id":4},{"pagename" :"呼び出された getter メソッド: 呼び出された getter メソッド: Test","pagestatus":"Test Status","id":4}]

目的の出力を得るには、コードにどのような変更を加える必要がありますか?

私の POJO クラス

package com.pojo;

import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonCachable;

/**
 * @author bhavik.ambani
 *
 *         Useful for storing the current status of the grid in the table.
 */
public class Tblselectablecolumnjqgrid implements java.io.Serializable, Cloneable {

    private static final long serialVersionUID = 1L;

    @JsonProperty("id")
    private int pageid;

    private String pagename;

    private String pagestatus;

    public Tblselectablecolumnjqgrid() {
    }

    public Tblselectablecolumnjqgrid(int pageid, String pagename) {
        this.pageid = pageid;
        this.pagename = pagename;
    }

    public Tblselectablecolumnjqgrid(int pageid, String pagename,
            String pagestatus) {
        this.pageid = pageid;
        this.pagename = pagename;
        this.pagestatus = pagestatus;
    }

    public int getPageid() {
        return this.pageid;
    }

    public void setPageid(int pageid) {
        this.pageid = pageid;
    }

    public String getPagename() {
        System.out.println("Called Getter Method");
        return "Called getter Method : " + this.pagename;
    }

    public void setPagename(String pagename) {
        this.pagename = pagename;
    }

    public String getPagestatus() {
        return this.pagestatus;
    }

    public void setPagestatus(String pagestatus) {
        this.pagestatus = pagestatus;
    }

    @Override
    public Tblselectablecolumnjqgrid clone() throws CloneNotSupportedException {
        Tblselectablecolumnjqgrid selBean = (Tblselectablecolumnjqgrid) super
                .clone();
        selBean.setPageid(getPageid());
        selBean.setPagename(getPagename());
        selBean.setPagestatus(getPagestatus());

        return selBean;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + pageid;
        result = prime * result
                + ((pagename == null) ? 0 : pagename.hashCode());
        result = prime * result
                + ((pagestatus == null) ? 0 : pagestatus.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Tblselectablecolumnjqgrid other = (Tblselectablecolumnjqgrid) obj;
        if (pageid != other.pageid)
            return false;
        if (pagename == null) {
            if (other.pagename != null)
                return false;
        } else if (!pagename.equals(other.pagename))
            return false;
        if (pagestatus == null) {
            if (other.pagestatus != null)
                return false;
        } else if (!pagestatus.equals(other.pagestatus))
            return false;
        return true;
    }
}

メインメソッドクラス

package com.jackson;

import java.io.IOException;
import java.util.ArrayList;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

import com.pojo.Tblselectablecolumnjqgrid;

public class JacksonParser {

    public static void main(String args[]) throws JsonGenerationException,
            JsonMappingException, IOException, CloneNotSupportedException {

        ArrayList<Tblselectablecolumnjqgrid> selList = new ArrayList<Tblselectablecolumnjqgrid>();

        Tblselectablecolumnjqgrid selCol = new Tblselectablecolumnjqgrid();
        selCol.setPageid(4);
        selCol.setPagename("Test");
        selCol.setPagestatus("Test Status");

        selList.add(selCol);
        selList.add(selCol.clone());
        selList.add(selCol.clone());
        selList.add(selCol.clone());

        ObjectMapper om = new ObjectMapper();

        String writeValueAsString = om.writeValueAsString(selList);
        System.out.println("Result:    " + writeValueAsString);
    }
}

期待される出力

{"TOTAL":1,"CURRENTPAGE":1,"TOTALRECORDS":6,"ROWS":[{"pagename":"呼び出された getter メソッド: Test","pagestatus":"Test Status","id": 4},{"pagename":"getter メソッドを呼び出しました: getter メソッドを呼び出しました: Test","pagestatus":"Test Status","id":4},{"pagename":"getter メソッドを呼び出しました: getter メソッドを呼び出しました: Test","pagestatus":"Test Status","id":4},{"pagename":"呼び出された getter メソッド: 呼び出された getter メソッド: Test","pagestatus":"Test Status","id":4 }]}

出力取得

[{"pagename":"呼び出された getter メソッド: Test","pagestatus":"Test Status","id":4},{"pagename":"呼び出された getter メソッド: 呼び出された getter メソッド: Test","pagestatus" :"Test Status","id":4},{"pagename":"呼び出された getter メソッド : Called getter メソッド : Test","pagestatus":"Test Status","id":4},{"pagename" :"呼び出された getter メソッド: 呼び出された getter メソッド: Test","pagestatus":"Test Status","id":4}]

4

1 に答える 1

2

のようなラッパーを書く

public class Wrapper {
  private int TOTAL;
  private int CURRENTPAGE;
  private int TOTALRECORDS;
  private List<Row> ROWS;

  //getters setters

}

public class Row {
  private String pagename;
  private String pagestatus;
  private int id;

  //getters setters
}

あなたのメインクラスで

//populate Wrapper
Wrapper wrap = new Wrapper();
//set attributes and Rows
...
String writeValueAsString = om.writeValueAsString(wrap);
于 2012-09-05T05:33:07.600 に答える