为了账号安全,请及时绑定邮箱和手机立即绑定

java中如何将json文件转换为excel文件

java中如何将json文件转换为excel文件

ABOUTYOU 2023-08-04 19:09:52
我遇到了将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 文件中。正在打印标题,但不打印值。
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

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


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 192 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信