java - java中如何将json文件转换成excel文件

标签 java json excel

我遇到了将 JSON 文件转换为 excel 文件的问题,简而言之,将 JSON 数据转换为 excel 数据。已尝试映射 JSON 键和值,但无法做到。

尝试映射 JSON 键和值,但无法做到。我已经使用了 apache POI api。

public class jsontoexcel {

    public static void main(String[] args) throws IOException,JSONException {
        jsontoexcel json4=new jsontoexcel();
        JSONObject json=json4.ReadJson();
        JSONArray array =new JSONArray();
        JSONObject rowjson=json.getJSONArray("rows").getJSONObject(0);

        XSSFWorkbook workbook=new XSSFWorkbook();
        XSSFSheet sheet=workbook.createSheet("Company Details");

        int len=rowjson.length();
        String[] RowArr=new String[len];
        Iterator<String> keys = rowjson.keys();
        int i=0;
        while(keys.hasNext())
        {
            RowArr[i]=keys.next();
            System.out.print("key:"+keys);
            i++;
        }
        List<String> slist= new ArrayList<String>();
        slist=json.get(rowjson.toString(keys));

         FileOutputStream out=new FileOutputStream(new File("C:\\code\\eclipse\\jsontoexcel\\src\\output.xlsx"));

         createHeaderRow(sheet, RowArr);
         workbook.write(out);
         out.close();



      //  Map<String,Object> map=new Map<String,Object>();      

    }

    public static void createHeaderRow(XSSFSheet sheet, String[] RowArr)
    {
        Row row=sheet.createRow(0);
        for(int i=0;i<RowArr.length-1;i++)
        {
            Cell cellTitle=row.createCell(i+1);
            String cellVal=RowArr[i];
            System.out.print("Cell data" + cellVal);
        }
    }
}

我希望输出存储在 excel 文件中。正在打印 header ,但不打印值。

最佳答案

除非确实需要,否则不要生成 Excel 文件。如果您想生成没有任何特定格式、图表、宏等的数据,只需生成包含纯数据的 CSV 文件即可。要读取 JSON 并生成 CSV,您可以使用 Jackson支持这两种数据格式的库。假设您的 JSON 如下所示:

{
  "rows": [
    {
      "id": 1,
      "name": "Vika",
      "age": 27
    },
    {
      "id": 2,
      "name": "Mike",
      "age": 28
    }
  ]
}

您需要创建适合该结构的 POJO 模型,将 JSON 反序列化为对象并将对象序列化为 CSV 格式。示例解决方案,可能如下所示:

import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SequenceWriter;
import com.fasterxml.jackson.dataformat.csv.CsvMapper;
import com.fasterxml.jackson.dataformat.csv.CsvSchema;

import java.io.File;
import java.util.List;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper jsonMapper = new ObjectMapper();
        Response response = jsonMapper.readValue(jsonFile, Response.class);

        CsvMapper csvMapper = new CsvMapper();
        CsvSchema schema = csvMapper.schemaFor(Item.class).withHeader();
        SequenceWriter sequenceWriter = csvMapper.writer(schema).writeValues(System.out);
        sequenceWriter.writeAll(response.getRows());
    }
}

class Response {
    private List<Item> rows;

    // getters, setters
}

@JsonPropertyOrder({"id", "name", "age"})
class Item {

    private int id;
    private String name;
    private int age;

    // getters, setters
}

以上代码打印:

id,name,age
1,Vika,27
2,Mike,28

另见:

关于java - java中如何将json文件转换成excel文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996757/

相关文章:

javascript - 从 Javascript 对象数组中为单个属性选择唯一值的正确方法是什么

excel - 获取范围内最后一个非空单元格的列号(如果值不唯一)

excel - 从文本框VBA中删除前导零

java - 如何在移至Google Activity时解决崩溃问题

Java 字符串拆分为 "."(点)

json - Spring Boot - 加密 JSON 数据

javascript - 将一些 json 数据推送到 Node.js 中的空数组

html - 我该如何提取这段文字

java - 预期和实际未显示在控制台日志中 - Groovy Spock

java - Junit 在我的测试用例中断言 OR 条件