JAVA中的Excel到Json转换器 [英] Excel to Json converter in JAVA

查看:100
本文介绍了JAVA中的Excel到Json转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图将excel数据转换为JSON格式。我成功通过读取行​​和列来转换Excel数据,并将数据设置为列表,然后将该列表转换为JSON格式。







以下是我的代码使用,但还没有开始如何使像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 popular;

@Column(name =RELEVANCE)
private String related;

@Column(name =SHORTLISTED)
private String shortlisted;

@Column(name =LIKES)
private String like;

@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;
/ * setter and getters * /
}

ExceltoJsonConverter类

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

产品product = new 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(工作表:+表);
HSSFRow行;

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布尔值,公式,错误
}

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(产品);
System.out.println(productsList);



// JSON转换器
ObjectMapper mapper = new ObjectMapper();

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

//将对象转换为JSON字符串并直接保存到文件中
mapper.writeValue(新文件(D:\\+ location +mygubbi.json),productsList) ;
//将对象转换为JSON字符串并直接保存到文件中
mapper.writeValue(new File(D:\\products.json),productsList);

//将对象转换为JSON字符串
字符串jsonInString = mapper.writeValueAsString(productsList);
System.out.println(JsonInString+ jsonInString);

//将对象转换为JSON字符串并且相当打印
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格式的多列数据,如下所示



非常感谢您提前...希望任何人都可以今天结束我的一天:)

解决方案

我也面临这种情况。您只需使用第二个工作表中的字段创建A类。
例如:

 公共类Somename {

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

在你的pojo类中定义一个数组

  private Somename some []; 

转到exceltoJson转换器类。尝试创建哈希映射并获取该表中需要的详细信息。就是这样......

  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 =新Somename(部分);
System.out.println(img1);

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

}
返回hm1;
}

然后添加此uploadXLS,

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

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

可能会对你有帮助。


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.

这篇关于JAVA中的Excel到Json转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆