JAVA中的Excel到Json转换器 [英] Excel to Json converter in JAVA
问题描述
我试图将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屋!