2014-01-14 4 views
1

У меня есть таблица с имеет столбцы, а именноПреобразование детали базы данных для объекта 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 из данных столбцов?

+0

Массив JSON ('[]') является списком Java, а объект JSON ('{}') является Карта Java. Постройте два Карты и Список, чтобы они соответствовали требуемой структуре, а затем «сериализовали» в JSON. –

ответ

5

Вы можете легко достигнуть этого с google-gson библиотеки. Простыми словами вам нужно было бы создать пару Pojos (со ссылкой на другой содержащийся в списке ссылок).

Рассмотрите RecordID и RecordName как Метаданные.

Создать 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 
     } 
    ] 
} 

EDIT:

Чтобы выровнять ваш код, вы можете захотеть сделать что-то вроде:

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); 
      } 
     } 
+0

Список objList = dao.getStatus(); DbMetaPojo obj = new DbMetaPojo(); if (objList! = Null && objList.size()> 10000) { for (Object nameObj: objList) { obj.setRecordID (nameObj [0]); obj.setRecordName (nameObj [0]); ; } } Это все верно? –

+0

@AmitSharad Не похоже, что вы перебираете весь список объектов и каждый раз присваиваете значение [0] -го индекса DbMetaPojo. Для доказательства концепции отбросьте свой цикл и попробуйте только с 0-м индексом элементов и создайте json с ним (как я уже говорил выше). Возможно, позже вы сможете создать массив 'DbMetaPojo' и работать с ним. – PopoFibo

+0

@AmitSharad Отредактирован ответ, чтобы показать, как вы можете выровнять его с вашим кодом – PopoFibo

2
  1. Прежде всего то, что вам нужно сделать, это извлечь данные из столбцов таблицы, используя ваш DAO и вызов функции из DAOIMPL, который в свою очередь, возвращает список данных (POJO наверное).

Создайте карту, как это, которое будет содержать ключевое значение пару для примера RecordId и значения, RecordName и значения

Map<String,Object> objMap = new HashMap<String,Object>(); 
    objMap.put("recordId", Record.getId()); 
    objMap.put("recordName",Record.getName()); 
    // Now here is the deal create another hashmap here whose key will be records "the key for your second array" 
    //Put the values in this second hashmap as instructed above and put it as a key value pair. 
    ........ 
    ....... 
    ....... 
    JSONObject JsonObject = JSONObject.fromObject(objMap);//This will create JSON object out of your hashmap. 
    objJSONList.add(JsonObject); 
} 


StringBuffer jsonBuffer = new StringBuffer(); 
    jsonBuffer.append("{\"data\": {"); 
    jsonBuffer.append(objJSONList.tostring()); 
    jsonBuffer.append("}"); 
    //jsonBuffer.append(",\"total\":"+ objJSONList.size());// TOTAL Optional 
    //jsonBuffer.append(",\"success\":true}");//SUCCESS message if using in callback Optional 
1

Создайте объект, который имеет свои attribues. (recordID, recordName, titleFeild, titleIDMap, titleId, titleStartDate, titleEndDate, языкId)

Получить данные из dao и преобразовать их в json. Он будет выглядеть так, как вы хотите.

Gson gson = new Gson(); 

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

Я думаю, что ваш dao.getStatus() должен вернуть список с ключами и значениями карты. Ваш ключ будет иметь имя столбца и значение будет контентом.

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)); 
       } 
      } 
     } 
    } 
+0

Что такое abt records array? –

Смежные вопросы