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}]