2016-03-04 54 views
3

我試圖將Excel數據轉換爲JSON格式。我成功地通過讀取行​​和列來轉換Excel數據,並將數據設置爲列表,然後將該列表轉換爲JSON格式。Excel到JSON轉換器在JAVA

enter image description here

enter image description here

但是,我堅持在JSON的一個新的水平,其中的格式會像 enter image description here

下面是使用它的IAM的代碼,但尚未開始怎麼做像3列數據這樣的嵌套數據應該像上面的圖像一樣出現在一個數組中。

POJO類

public class Products implements Serializable{ 

@Id 
@Column(name="ID") 
private String id; 

@Column(name="PRODUCTID") 
private String productId; 

@Column(name="NAMEID") 
private String nameId; 

@Column(name="NAME") 
private String name; 

@Column(name="P_DESC") 
private String desc; 

@Column(name="DIMENSION") 
private String dimension; 

@Column(name="CATEGORY") 
private String category; 

@Column(name="SUB_CATEGORY") 
private String subcategory; 

@Column(name="CATEGORYID") 
private String categoryId; 

@Column(name="SUBCATEGORYID") 
private String subcategoryId; 

@Column(name="TAGS") 
private String tags; 

@Column(name="DESIGNER") 
private String designer; 

@Column(name="CURR") 
private String curr; 

@Column(name="POPULARITY") 
private String popularity; 

@Column(name="RELEVANCE") 
private String relevance; 

@Column(name="SHORTLISTED") 
private String shortlisted; 

@Column(name="LIKES") 
private String likes; 

@Column(name="CREATE_String") 
private String createDt; 

@Column(name="PAGEID") 
private String pageId; 

@Column(name="STYLENAME") 
private String styleName; 

@Column(name="STYLEID") 
private String styleId; 

@Column(name="PRICERANGE") 
private String priceRange; 

@Column(name="PRICEID") 
private String priceId; 

@Column(name="DEFAULT_PRICE") 
private String defaultPrice; 

@Column(name="DEFAULT_MATERIAL") 
private String defaultMaterial; 

@Column(name="DEFAULT_FINISH") 
private String defaultFinish; 
/* setters and getters */ 
} 

ExceltoJsonConverter類

public static void uploadXLS(MultipartFile file, Document doc) 
    throws IOException { 

Products products = new Products(); 

List<Products> productsList = new ArrayList<Products>(); 

logger.info("uploadExcel method"); 
HSSFWorkbook wb = null; 
try { 

    wb= new HSSFWorkbook(file.getInputStream()); 
     System.out.println("workbook: "+wb); 
     HSSFSheet sheet = wb.getSheetAt(0); 
     System.out.println("worksheet: "+sheet); 
     HSSFRow row; 

     Iterator<Row> iterator = sheet.iterator(); 
while (iterator.hasNext()) { 
       products = new Products(); 
       Row nextRow = iterator.next(); 
       Iterator<Cell> cellIterator = nextRow.cellIterator(); 
       Cell cell = cellIterator.next(); 
        Iterator cells = nextRow.cellIterator(); 

         cell=(HSSFCell) cells.next(); 

         if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) 
         { 
          System.out.print(cell.getStringCellValue()+" "); 
         } 
         else if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) 
         { 
          System.out.print(cell.getNumericCellValue()+" "); 
         } 
         else if(HSSFDateUtil.isCellDateFormatted(cell)){ 
          Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); 
         } else 
         { 
          //U Can Handel Boolean, Formula, Errors 
         } 

         products.setId(new DataFormatter().formatCellValue(nextRow.getCell(0))); 
         products.setProductId(new DataFormatter().formatCellValue(nextRow.getCell(1))); 
         products.setNameId(new DataFormatter().formatCellValue(nextRow.getCell(2))); 
         products.setName(new DataFormatter().formatCellValue(nextRow.getCell(3))); 
         products.setDesc(new DataFormatter().formatCellValue(nextRow.getCell(4))); 
         products.setDimension(new DataFormatter().formatCellValue(nextRow.getCell(5))); 
         products.setCategory(new DataFormatter().formatCellValue(nextRow.getCell(6))); 
         products.setSubcategory((new DataFormatter().formatCellValue(nextRow.getCell(7)))); 
         products.setCategoryId(new DataFormatter().formatCellValue(nextRow.getCell(8))); 
         products.setSubcategoryId((new DataFormatter().formatCellValue(nextRow.getCell(9)))); 
         products.setTags((new DataFormatter().formatCellValue(nextRow.getCell(10)))); 
         products.setDesigner((new DataFormatter().formatCellValue(nextRow.getCell(11)))); 
         products.setCurr((new DataFormatter().formatCellValue(nextRow.getCell(12)))); 
         products.setPopularity((new DataFormatter().formatCellValue(nextRow.getCell(13)))); 
         products.setRelevance((new DataFormatter().formatCellValue(nextRow.getCell(14)))); 
         products.setShortlisted((new DataFormatter().formatCellValue(nextRow.getCell(15)))); 
         products.setLikes((new DataFormatter().formatCellValue(nextRow.getCell(16)))); 
         products.setCreateDt((new DataFormatter().formatCellValue(nextRow.getCell(17)))); 
         products.setPageId((new DataFormatter().formatCellValue(nextRow.getCell(18)))); 
         products.setStyleName((new DataFormatter().formatCellValue(nextRow.getCell(19)))); 
         products.setStyleId((new DataFormatter().formatCellValue(nextRow.getCell(20)))); 
         products.setPriceRange((new DataFormatter().formatCellValue(nextRow.getCell(21)))); 
         products.setPriceId((new DataFormatter().formatCellValue(nextRow.getCell(22)))); 
         products.setDefaultPrice((new DataFormatter().formatCellValue(nextRow.getCell(23)))); 
         products.setDefaultMaterial((new DataFormatter().formatCellValue(nextRow.getCell(24)))); 
         products.setDefaultFinish((new DataFormatter().formatCellValue(nextRow.getCell(25)))); 

         Map<String, String> inputMap = new HashMap<String, String>(); 
         inputMap.put("name", "Java2Novice"); 
         inputMap.put("site", "http://java2novice.com"); 
         productsList.add(products); 
        System.out.println(productsList); 



      // JSON CONVERTER 
    ObjectMapper mapper = new ObjectMapper(); 

    System.out.println("productsList: "+products); 
    DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); 
     Date date = new Date(); 
     String location = dateFormat.format(date); 
     System.out.println("productsList final: "+products); 

     // Convert object to JSON string and save into file directly 
     mapper.writeValue(new File("D:\\"+location+"mygubbi.json"), productsList); 
     // Convert object to JSON string and save into file directly 
     mapper.writeValue(new File("D:\\products.json"), productsList); 

     // Convert object to JSON string 
     String jsonInString = mapper.writeValueAsString(productsList); 
     System.out.println("JsonInString " +jsonInString); 

     // Convert object to JSON string and pretty print 
     jsonInString = mapper.writerWithDefaultPrettyPrinter() 
       .writeValueAsString(products); 
     System.out.println("Final Json" +mapper.writerWithDefaultPrettyPrinter() 
       .writeValueAsString(products)); 
     mapper.writeValue(new File("D:\\productsJson.json"), jsonInString); 


     } 
     } catch (JsonGenerationException e) { 
    e.printStackTrace(); 
} catch (JsonMappingException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
finally { 


} 
} 

請建議我如何處理,以獲得JSON格式多列數據如下圖所示 enter image description here

A BIG預先感謝你...希望任何人今天能夠讓我的一天:)

+0

我刪除了我的答案。目前尚不清楚你的具體問題是什麼。儘量減少您的問題至關重要,並且不要忽略重要信息。 – idelvall

回答

1

我也面臨這種情況。你只需要在第二張表格中創建一個帶有字段的類。 對於前:

public class Somename{ 

private String abc; 
private String xyz; 
// getters and setters 
} 

在你的POJO類定義數組

private Somename some[]; 

轉到exceltoJson轉換器class.Try創建哈希表,並獲取其u需要在表的細節。就是這樣......

public static Map getImgs(HSSFWorkbook wb) { 

    Map hm1 = new HashMap<String, ArrayList<Somename>>(); 
    HSSFSheet sheet = wb.getSheetAt(2); 
    Iterator<Row> iterator= sheet.iterator(); 
    ArrayList<Somename> al = new ArrayList<Somename>(); 
    while (iterator.hasNext()) { 
     Row row = iterator.next(); 

     String sno = new DataFormatter().formatCellValue(row.getCell(0)); 


     if (hm1.get(sno) == null) { 
      hm1.put(sno, new ArrayList()); 
     } 

     String some= new DataFormatter().formatCellValue(row 
       .getCell(1)); 

     Somename img1 = new Somename(some); 
     System.out.println(img1); 

     ArrayList r = (ArrayList) hm1.get(sno); 
     r.add(img1); 

    } 
    return hm1; 
    } 

然後添加此uploadXLS,

ArrayList<Somename> al = (ArrayList<Somename>) hm1.get(id_prod); 
         Somename[] ar = new Images[al.size()]; 

         products.setSome(al.toArray(imgfar)); 

可能這會幫助你。

+0

好的。我會嘗試..預先感謝您 – user3599302

+0

好的...試試看。 – 2016-03-06 10:04:58

+0

非常感謝 – user3599302