繁体   English   中英

如何使用 GSON 库将 excel 文件数据转换为 JSON 格式?

[英]How to convert the excel file data into JSON format using GSON library?

这里我有一个名为 Merged.xlsx 的 excel 文件。 这个图如下:- 在此处输入图像描述

我希望这些数据以 JSON 格式显示为:-

{
  "Cars":[
    {"SellerName":"govinda lamgade","Seller Address":"-Dallu,Kathmandu",...},

  ],
  "Motorcycle":[
    {Same as above},
  ]
}

到目前为止,我得到的结果为

{"rows":[{"cell":["Skoda Rapid On Sale And Exchange"," govinda lamgade ","- Dallu, Kathmandu","19-06-2020",1450000.0,"https://cdn.hamrobazaar.com/21...

这不是我想要的。 代码如下: -

    String excelFilePath = "E:\\Merged.xlsx";
    FileInputStream fileInputStream = new FileInputStream(excelFilePath);
    Workbook workbook = new XSSFWorkbook(fileInputStream);

    Sheet sheet = workbook.getSheetAt(0);
    JsonObject jsonObject = new JsonObject();
    JsonArray rows = new JsonArray();
    Iterator<Row> rowIterator = sheet.iterator();
    while(rowIterator.hasNext()){
        Row row = rowIterator.next();

        if(row.getRowNum() == 0) {
            continue;
        }
        else{
            JsonObject jRow = new JsonObject();
            JsonArray cells = new JsonArray();
            Iterator<Cell> cellIterator = row.cellIterator();
            while (cellIterator.hasNext()) {
                Cell cell = cellIterator.next();
               
                switch (cell.getCellType()) {
                    case Cell.CELL_TYPE_NUMERIC:
                        cells.add(cell.getNumericCellValue());
                        break;
                    case Cell.CELL_TYPE_STRING:
                        cells.add(cell.getStringCellValue());
                        break;
                }
                jRow.add("cell",cells);
                rows.add(jRow);
            }
            jsonObject.add("rows", rows);
        }
        System.out.println(jsonObject.toString());
        fileInputStream.close();
    }
}

}

谢谢你

您可以按以下方式执行此操作;

假设:

  • 此表仅包含汽车相关数据
  • 工作表中没有空行
  • 所有行都有每列的数据值

重要的:

You have to give the expected json key for each json value as the column name in the excel sheet (eg:- put sellerName as column name instead of Seller Name in the excel file)

所需进口;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import java.util.*;

您应该获取 Cell 数据并放入 HashMap ,然后将 HashMap 转换为JsonElement

String excelFilePath = "E:\\Merged.xlsx";
FileInputStream fileInputStream = new FileInputStream(excelFilePath);
Workbook workbook = new XSSFWorkbook(fileInputStream);

Sheet sheet = workbook.getSheetAt(0);

JsonArray carArray = new JsonArray();
List<String> columnNames = new ArrayList<>();

Gson gson = new Gson();

// Get column names
Row row = sheet.getRow(0);
for (Iterator<Cell> it = row.cellIterator(); it.hasNext(); ) {
    Cell cell = it.next();
    columnNames.add(cell.getStringCellValue());
}

Iterator<Row> rowIterator = sheet.iterator();    
while (rowIterator.hasNext()) {
    row = rowIterator.next();
    if (row.getRowNum()==0) {
        continue;
    }
    Iterator<String> columnNameIterator = columnNames.iterator();
    Iterator<Cell> cellIterator = row.cellIterator();

    // Create a new map for the row
    Map<String, Object> newCarMap = new HashMap<>();
    while (cellIterator.hasNext()) {
        Cell cell = cellIterator.next();
        String columnName = columnNameIterator.next();

        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_NUMERIC:
                newCarMap.put(columnName, cell.getNumericCellValue());
                break;
            case Cell.CELL_TYPE_STRING:
                newCarMap.put(columnName, cell.getStringCellValue());
                break;
        }
    }
    // Convert the map to `JsonElement`
    JsonElement carJson = gson.toJsonTree(newCarMap);
    // Add the `JsonElement` to `JsonArray`
    carArray.add(carJson);
}
// Add the `JsonArray` to `completeJson` object with the key as `Cars`
JsonObject completeJson = new JsonObject();

completeJson.add("Cars", carArray);

如果您打印completeJson

{
  "Cars": [
    {
      "price": 111111,
      "imageUrl": "https://example_url_1",
      "sellerAddress": "address_1",
      "sellerName": "name_1",
      "date": "12-07-2020"
    },
    {
      "price": 222222,
      "imageUrl": "https://example_url_2",
      "sellerAddress": "address_2",
      "sellerName": "name_2",
      "date": "19-06-2020"
    }
    // rest of the car json objects will come here
  ]
}

同样,您可以创建Motorcycle json 阵列。 将 MotorCycle JsonArray添加到 completeJson 时,将密钥作为Motorcycle (或您喜欢的密钥)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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