将数据库详细信息转换为JSON对象

时间:2014-01-14 09:58:42

标签: java json

我有一张表有

recordID,recordName,titleFeild,titleIDMap,titleId,titleStartDate,titleEndDate,languageId

现在我已将上面列中的数据转换为JSON对象数据,如下所示

{
  "recordId" :10,
  "recordName" : "RECORDS",
  "records" : [ {
    "titleField" : 1,
    "titleIDMap" : null,
    "titleId" : 500,
    "titleStartDate" : "2013-12-22T00:00:00.000+0000",
    "titleEndDate" : "2013-12-03T00:00:00.000+0000",
    "languageId" : 20
  }]
}

请注意记录列数组(titleFeild,titleIDMap,titleId,titleStartDate,titleEndDate,languageId)

到目前为止我开发的代码是

    List<Object[]> objList = dao.getStatus();
    Integer result = null;
     JSONObject jsonData = new JSONObject();
     JSONArray jsonDataArray = new JSONArray();
    if(objList!=null && objList.size()>10000)
        {
            for (Object[] nameObj : objList) {

                jsonData.put("", nameObj.get(arg0) );


            }
        }

如何从列数据构建JSON对象?

4 个答案:

答案 0 :(得分:5)

您可以使用google-gson库轻松实现此目的。简单来说,你必须创建一些 Pojos (参考另一个包含引用列表)。

RecordIDRecordName视为元数据

创建代表此信息的pojo

public class DbMetaPojo {

    private int recordID;
    private String recordName;
    private List<Record> records;

    public List<Record> getRecords() {
        return records;
    }

    public void setRecords(List<Record> records) {
        this.records = records;
    }

    public String getRecordName() {
        return recordName;
    }

    public void setRecordName(String recordName) {
        this.recordName = recordName;
    }

    public int getRecordID() {
        return recordID;
    }

    public void setRecordID(int recordID) {
        this.recordID = recordID;
    }

}

使用实际的pojo字段创建另一个Record

public class Record {

    public int getTitleFeild() {
        return titleFeild;
    }

    public void setTitleFeild(int i) {
        this.titleFeild = i;
    }

    public String getTitleIDMap() {
        return titleIDMap;
    }

    public void setTitleIDMap(String titleIDMap) {
        this.titleIDMap = titleIDMap;
    }

    public int getTitleId() {
        return titleId;
    }

    public void setTitleId(int titleId) {
        this.titleId = titleId;
    }

    public String getTitleStartDate() {
        return titleStartDate;
    }

    public void setTitleStartDate(String titleStartDate) {
        this.titleStartDate = titleStartDate;
    }

    public String getTitleEndDate() {
        return titleEndDate;
    }

    public void setTitleEndDate(String titleEndDate) {
        this.titleEndDate = titleEndDate;
    }

    public int getLanguageId() {
        return languageId;
    }

    public void setLanguageId(int languageId) {
        this.languageId = languageId;
    }

    private int titleFeild;
    private String titleIDMap;
    private int titleId;
    private String titleStartDate;
    private String titleEndDate;
    private int languageId;

}

现在只是使用相关数据 填充POJOs的方法(用数据检索替换硬编码逻辑):

public static void main(String... main) {
        DbMetaPojo obj = new DbMetaPojo();

        obj.setRecordID(10);
        obj.setRecordName("RECORDS");

        Record record = new Record();

        record.setLanguageId(20);
        record.setTitleEndDate("2013-12-22T00:00:00.000+0000");
        record.setTitleFeild(1);
        record.setTitleId(500);
        record.setTitleIDMap("SOME NULL");
        record.setTitleStartDate("2013-12-22T00:00:00.000+0000");

        List<Record> list = new ArrayList<Record>();
        list.add(record);
        obj.setRecords(list);

        Gson gson = new Gson();

        String json = gson.toJson(obj);

        System.out.println(json);
    }

输出是您形成的JSON:

{
    "recordID": 10,
    "recordName": "RECORDS",
    "records": [
        {
            "titleFeild": 1,
            "titleIDMap": "SOME NULL",
            "titleId": 500,
            "titleStartDate": "2013-12-22T00:00:00.000+0000",
            "titleEndDate": "2013-12-22T00:00:00.000+0000",
            "languageId": 20
        }
    ]
}

修改

要与代码对齐,您可能需要执行以下操作:

List<Object> objList = dao.getStatus();
        List<DbMetaPojo> metaList = new ArrayList<DbMetaPojo> ();
        if (objList != null && objList.size() > 10000) {
            for (Object nameObj : objList) {
                DbMetaPojo meta = new DbMetaPojo();
                meta.setRecordID(nameObj[0]);
                meta.setRecordName(nameObj[0]);
                ...
                ...
                ...

                metaList.add(meta);
            }
        }

答案 1 :(得分:2)

  1. 首先,您需要做的是使用DAO从表格的列中检索数据,然后从DAOIMPL调用函数,然后将返回数据列表({{ 1}}可能)。
  2. 创建一个这样的地图,其中包含您的键值对,例如recordid和value, 记录名和值

    POJO

答案 2 :(得分:1)

创建一个具有您的属性的对象。 (recordID,recordName,titleFeild,titleIDMap,titleId,titleStartDate,titleEndDate,languageId)

从dao获取数据并将其转换为json。它看起来就像你想要的那样。

Gson gson = new Gson();

    // convert java object to JSON format,
    // and returned as JSON formatted string
    String json = gson.toJson(obj);

答案 3 :(得分:1)

我认为你的dao.getStatus()应该返回一个带有Map键和值的List。您的密钥将是列名称,值将是内容。

List<Map<String,Object>> objList = dao.getStatus();
if(objList!=null && objList.size()>10000){
   for(Map<String,Object> row : objList) {
       Iterator<String> keyList = row.keySet().iterator();
       while(keyList.hasNext()){
          String key = keyList.next();
          jsonData.put(key, row.get(key));
       }
   }
}

对于记录数组,您需要在迭代表列时构建它。 将上面的代码与构建记录数组相结合将是这样的..

    String[] group = {"titleField","titleIDMap","titleId","titleStartDate","titleEndDate","languageId"};
    List<String> recordGroup = Arrays.asList(group);
    Map<Object, JSONArray> records = new HashMap<Object,JSONArray>();
    List<Map<String,Object>> objList = dao.getStatus();
    JSONObject jsonData = new JSONObject();
    if(objList!=null && objList.size()>10000){
       for(Map<String,Object> row : objList) {
           int columnCount = 0;
           Iterator<String> keyList = row.keySet().iterator();

           while(keyList.hasNext()){
              String key = keyList.next();

              if(recordGroup.contains(key)){
                  Object recordId = row.get("recordId");
                  JSONArray recordArray = new JSONArray();
                  if(records.containsKey(recordId)){
                      recordArray = records.get(recordId);
                      JSONObject jsonObj = null;
                      if(columnCount >= recordGroup.size()){
                         jsonObj = new JSONObject();
                         recordarray.add(jsonObj);
                         columnCount = 0; 
                      }
                      else {
                         jsonObj = (JSONObject) recordArray.get(recordArray.size()-1);
                      }
                      jsonObj.put(key, row.get(key));
                      columnCount++;
                  }
                  else {
                      JSONObject jsonObj = new JSONObject();
                      jsonObj.put(key, row.get(key));
                      recordArray.add(jsonObj);
                      records.put(recordId, recordArray);
                  }
                  jsonData.put("records", records.get(recordId));
              }
              else {
                  jsonData.put(key, row.get(key));
              }
           }
       }
    }