2015-08-28 51 views
1

我已经设计了一个JSON结构来表示具有标题列和表格行的表,如下所示。创建POJO以匹配JSON结构

{ 
    "header": [ 
    { 
     "fieldType": "STRING", 
     "readOnly": true, 
     "headerValue": "name" 
    }, 
    { 
     "fieldType": "STRING", 
     "readOnly": true, 
     "headerValue": "description" 
    } 
    ], 
    "rows": [ 
    [ 
     { 
     "fieldValue" : "engine"    
     }, 
     { 
     "fieldValue" : "this is an engine" 
     } 
    ], 
    [ 
     { 
     "fieldValue" : "engine"    
     }, 
     { 
     "fieldValue" : "this is an engine" 
     } 
    ], 
    [ 
     { 
     "fieldValue" : "engine"    
     }, 
     { 
     "fieldValue" : "this is an engine" 
     } 
    ], 
    [ 
     { 
     "fieldValue" : "engine"    
     }, 
     { 
     "fieldValue" : "this is an engine" 
     } 
    ] 
    ] 
} 

行是例如

[ 
    { 
    "fieldValue" : "engine"    
    }, 
    { 
    "fieldValue" : "this is an engine" 
    } 
] 

条目的行中的号码相匹配头列的数目。所以"engine""name"列,"this is an engine""description"

当我使用GSON把我的POJO的成JSON字符串我有符合此结构最接近的是:

{ 
    "header": [ 
    { 
     "fieldType": "STRING", 
     "readOnly": true, 
     "headerValue": "name" 
    }, 
    { 
     "fieldType": "STRING", 
     "readOnly": true, 
     "headerValue": "description" 
    } 
    ], 
    "rows": [ 
    { 
     "fieldValues": [ 
     "engine", 
     "this is an engine" 
     ] 
    }, 
    { 
     "fieldValues": [ 
     "engine", 
     "this is an engine" 
     ] 
    }, 
    { 
     "fieldValues": [ 
     "engine", 
     "this is an engine" 
     ] 
    }, 
    { 
     "fieldValues": [ 
     "engine", 
     "this is an engine" 
     ] 
    } 
    ] 
} 

这里是我的代码用于测试

enum FieldType { 

    STRING, 
    BOOLEAN, 
    NUMBER, 
    PHOTO, 
    PHOTOLIST; 

} 

class SurveyFields { 

    private List<SurveyColumn> header; 
    private List<SurveyRow> rows; 

    public List<SurveyColumn> getHeader() { 
     return header; 
    } 

    public List<SurveyRow> getRows() { 
     return rows; 
    } 

    public void setHeader(List<SurveyColumn> header) { 
     this.header = header; 
    } 

    public void setRows(List<SurveyRow> rows) { 
     this.rows = rows; 
    } 

} 

class SurveyColumn { 

    private FieldType fieldType; 
    private boolean readOnly; 
    private String headerValue; 

    public static class Builder { 
     private FieldType fieldType; 
     private boolean readOnly; 
     private String headerValue; 

     public Builder withFieldType(FieldType fieldType) { 
      this.fieldType = fieldType; 
      return this; 
     } 

     public Builder withReadOnly(boolean readOnly) { 
      this.readOnly = readOnly; 
      return this; 
     } 

     public Builder withHeaderValue(String headerValue) { 
      this.headerValue = headerValue; 
      return this; 
     } 

     public SurveyColumn build() { 
      return new SurveyColumn(fieldType, readOnly, headerValue); 
     } 
    } 

    public SurveyColumn(FieldType fieldType, boolean readOnly, String headerValue) { 
     this.fieldType = fieldType; 
     this.readOnly = readOnly; 
     this.headerValue = headerValue; 
    } 
} 

class SurveyRow { 

    public static class Builder { 
     private String[] fieldValues; 

     public Builder withFieldValues(String[] fieldValues) { 
      this.fieldValues = fieldValues; 
      return this; 
     } 

     public SurveyRow build() { 
      return new SurveyRow(fieldValues); 
     } 
    } 

    private String[] fieldValues; 

    public SurveyRow(String[] fieldValues) { 
     this.fieldValues = fieldValues; 
    } 
} 

public class TestGson { 

    public static void main(String[] args) { 

     SurveyFields fields = new SurveyFields(); 

     fields.setHeader(Arrays.asList(new SurveyColumn[] { 
       new SurveyColumn.Builder().withHeaderValue("name").withFieldType(FieldType.STRING).withReadOnly(true) 
         .build(), 
       new SurveyColumn.Builder().withHeaderValue("description").withFieldType(FieldType.STRING) 
         .withReadOnly(true).build() })); 

     fields.setRows(Arrays.asList(new SurveyRow[] { 
       new SurveyRow.Builder().withFieldValues(new String[] { "engine", "this is an engine" }).build(), 
       new SurveyRow.Builder().withFieldValues(new String[] { "engine", "this is an engine" }).build(), 
       new SurveyRow.Builder().withFieldValues(new String[] { "engine", "this is an engine" }).build(), 
       new SurveyRow.Builder().withFieldValues(new String[] { "engine", "this is an engine" }).build() 
     })); 

     Gson gson = new Gson(); 
     System.out.println(gson.toJson(fields)); 

    } 

} 

我该如何构建我的POJO以匹配预期的JSON输出?

+1

到目前为止做得好......但......确切的问题是什么? – RobAu

+0

我已经澄清,现在有一些新增加 – PDStat

回答

2

如果您从第三方获得JSON,this site可能会帮助您从JSON生成POJO。

+0

这是一个有用的网站! – RobAu

+0

单击我的示例JSON预览只显示一个空白页? – PDStat

+0

@ user2987444您是否选择了源类型为“JSON”而不是“JSON Schema”? – Amila