简体   繁体   English

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

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

Here I have a excel file named Merged.xlsx.这里我有一个名为 Merged.xlsx 的 excel 文件。 The figure of this is as:-这个图如下:- 在此处输入图像描述

and I want this data to be displayed in a JSON format as:-我希望这些数据以 JSON 格式显示为:-

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

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

So far I have got the result as到目前为止,我得到的结果为

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

which is not the one that I wanted.这不是我想要的。 The code is as:-代码如下: -

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

} }

Thank You谢谢你

You can do this as follows;您可以按以下方式执行此操作;

Assumptions:假设:

  • This sheet only contains Car related data此表仅包含汽车相关数据
  • No empty rows in the sheet工作表中没有空行
  • All rows have data value for each column所有行都有每列的数据值

Important:重要的:

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) 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)

Required imports;所需进口;

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.*;

You should get Cell data and put to a HashMap and then convert the HashMap to a JsonElement ;您应该获取 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);

If you print the completeJson ;如果您打印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
  ]
}

Like wise you can create the Motorcycle json array.同样,您可以创建Motorcycle json 阵列。 When adding MotorCycle JsonArray to completeJson, put the key as Motorcycle (or the key you prefer)将 MotorCycle JsonArray添加到 completeJson 时,将密钥作为Motorcycle (或您喜欢的密钥)

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

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