简体   繁体   中英

Excel to Json converter in JAVA

Am trying to covert the excel data into JSON format. And i am successful upto converting excel data by reading the rows and columns and set the data to list and then converting that List to JSON format.

在此处输入图片说明

在此处输入图片说明

But, I stuck in next level of JSON where the format will be like在此处输入图片说明

Here is the code which iam using, But not yet started how to make that nested data like 3 columns data should come in one array like the above image.

Pojo class :

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 class :

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 {


}
}

Please suggest me how to approach to get multiple columns data in Json format as shown below在此处输入图片说明

A BIG Thank you in advance... Hoping anyone can make my day today :)

I too faced this type of scenario. You Just create A class with the fields which you having in the second sheet. For ex:

public class Somename{

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

In your pojo class define an array

private Somename some[];

Goto exceltoJson converter class.Try to create Hash map and fetch the details which u need in that sheet. That's it...

    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;
    }

Then add this uploadXLS,

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

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

May be this will help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM