次のJavaコードがあります
@XmlRootElement
public class PreferenceEntity {
String type, name;
int id;
Map<String, String> attributes = new HashMap<String, String>();
List<PreferenceEntity> children;
PreferenceEntity parent;
public PreferenceEntity() {
parent = null;
}
public PreferenceEntity(PreferenceEntity parent) {
this.parent = parent;
}
@XmlAnyElement
public List<PreferenceEntity> getChildren() {
return children;
}
public void setChildren(List<PreferenceEntity> children) {
this.children = children;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@JsonSerialize(contentUsing=SubjectAutocompleteSerializer.class)
public Map<String, String> getAttributes() {
return attributes;
}
@XmlTransient
public PreferenceEntity getParent() {
return parent;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
if (id >= 0) {
this.id = id;
}
}
// Internal class
public static class SubjectAutocompleteSerializer extends JsonSerializer<Map<String, String>> {
@Override
public void serialize(Map<String, String> map, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartObject();
for (String key:map.keySet()) {
jgen.writeStringField(key, map.get(key));
}
//jgen.writeFieldName(value.getType());
//jgen.writeStringField(value.getType(), value.getType());
// jgen.writeStartObject();
//jgen.writeObject(value);
//jgen.writeStartObject("XMY");
//jgen.writeStringField("value", value.getName());
// jgen.writeEndObject();
jgen.writeEndObject();
}
}
}
出力は次のとおりです。
{
-preferences : [
-{
-children : [
-{
children : null
type : "A1"
-attributes : {
ColumnId : "86"
}
}
-{
children : null
type : "A2"
-attributes : {
ColumnId : "87"
}
}
-{
children : null
type : "A1"
-attributes : {
ColumnId : "382"
Selected : "true"
}
}
目的の出力は次のとおりです。
{
-preferences : [
-{
-children : [
-{
children : null
type : "A1"
ColumnId : "86"
}
-{
children : null
type : "A2"
ColumnId : "87"
}
-{
children : null
type : "A1"
ColumnId : "382"
Selected : "true"
}
}
私がそれを手に入れることができれば:
{
-preferences : [
-{
-A1 : [
-{
children : null
type : "A1"
ColumnId : "86"
}
-A2{
children : null
ColumnId : "87"
}
-A3{
children : null
ColumnId : "382"
Selected : "true"
}
}
JsonSerialize を使用してみましたが、HashMap では機能していないようです。どんな指針も大いに役立ちます。
よろしく ホワイトロータス