假如我们有一段json串,该json串是由一系列结构相同的数据集合组成,如下:

{
"data": [
{
"groupId": "com.test.demo",
"artifactId": "demo-api",
"version": "1.0.0-release",
"latestSnapshot": "2.0.0-SNAPSHOT"
},
{
"groupId": "com.test.demo.core",
"artifactId": "demo-core",
"version": "1.1.3",
"latestSnapshot": "1.3.0-SNAPSHOT"
}
]
}

现在,想要转换成excel表单:

针对该需求,于是在网上找了个excel工具包。

现在将实现代码贴出来,希望给正有此需求的同仁些许帮助。

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator; /**
* @Author changle
* @Time 17/8/1.
* @Desc json转变为Excel演示
*/
@Slf4j
public class JsonToExcelDemo {
public static void main(String[] args) {
parseJsonToExcel("/var/tmp/jsonToExcel-demo.xls", "data", mavenInfos);
} static void parseJsonToExcel(String saveFileName, String rootNodeName, String sourceJson){
try{
File filewrite=new File(saveFileName);
filewrite.createNewFile();
OutputStream os = new FileOutputStream(filewrite);
JSONObject jsonObject = JSONObject.fromObject(sourceJson);
createExcel(os, jsonObject, rootNodeName);
log.info("解析完毕");
}catch (Exception e){
e.printStackTrace();
}
} public static void createExcel(OutputStream os, JSONObject apiJarInfos, String rootNodeName) throws WriteException,IOException {
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(os);
//创建新的一页
WritableSheet sheet = workbook.createSheet("First Sheet",);
JSONArray jsonArray = (JSONArray)apiJarInfos.get(rootNodeName);
JSONObject jsonObjectHeader = jsonArray.getJSONObject();
String[] headers = createTableHeader(jsonObjectHeader, sheet);
int size = jsonArray.size()+;
for(int i=; i<size; i++){
JSONObject jsonObject = jsonArray.getJSONObject(i-);
int j = ;
for (String key : headers){
Label cellValue = new Label(j, i, jsonObject.get(key).toString());
sheet.addCell(cellValue);
j++;
}
}
//把创建的内容写入到输出流中,并关闭输出流
workbook.write();
workbook.close();
os.close();
} static String[] createTableHeader(JSONObject jsonObjectHeader, WritableSheet sheet) throws WriteException {
//遍历JSONObject中的key
Iterator iterable = jsonObjectHeader.keys();
String[] headers = new String[jsonObjectHeader.size()];
int i = ;
while (iterable.hasNext()){
//创建要显示的内容,创建一个单元格,第一个参数为列坐标,第二个参数为行坐标,第三个参数为内容
String headerName = iterable.next().toString();
Label cell = new Label(i, , headerName);
sheet.addCell(cell);
headers[i] = headerName;
i++;
log.info(headerName);
}
return headers;
} private static final String mavenInfos ="{ \n" +
" \"data\": [\n" +
" {\n" +
" \"groupId\": \"com.test.demo\",\n" +
" \"artifactId\": \"demo-api\",\n" +
" \"version\": \"1.0.0-release\",\n" +
" \"latestSnapshot\": \"2.0.0-SNAPSHOT\"\n" +
" },\n" +
" {\n" +
" \"groupId\": \"com.test.demo.core\",\n" +
" \"artifactId\": \"demo-core\",\n" +
" \"version\": \"1.1.3\",\n" +
" \"latestSnapshot\": \"1.3.0-SNAPSHOT\"\n" +
" }\n" +
" ]\n" +
"}";
}

执行main方法,得到/var/tmp/api-sources.xls文件。和预想中的效果一样。

需要用到的jar包:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160212</version>
</dependency>
<dependency>
    <groupId>java-excel-jxl</groupId>
    <artifactId>java-excel-jxl</artifactId>
    <version>1.0.0</version>
</dependency>

java-excel-jxl这个包请下载  https://jaist.dl.sourceforge.net/project/jexcelapi/jexcelapi/2.6.6/jexcelapi_2_6_6.zip  解压。

https://blog.csdn.net/skypig555/article/details/77623245

http://j2e.kpoda.com/

Json字符串转excel表格文件的更多相关文章

  1. php中读写excel表格文件示例。

    测试环境:php5.6.24.这块没啥兼容问题. 需要更多栗子,请看PHPExcel的examples.还是蛮强大的. 读取excel文件. 第一步.下载开源的PHPExcel的类库文件,官方网站是h ...

  2. pyhton读取 excel表格文件

    2019的第一天,忘记昨日之事,迎接新的明天. excel表格文件办公中常用,如通过Python操作这些数据需导入并有序读取这些数据 特随笔,供以后查阅 代码如下: import xlrd # fil ...

  3. python读取Excel表格文件

    python读取Excel表格文件,例如获取这个文件的数据 python读取Excel表格文件,需要如下步骤: 1.安装Excel读取数据的库-----xlrd 直接pip install xlrd安 ...

  4. Python读取Json字典写入Excel表格的方法

    需求: 因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决问题. 环境: Windows7 +Python2.7 + ...

  5. PHP生成excel表格文件并下载

    本文引自网络,仅供自己学习之用. 利用php导出excel我们大多会直接生成.xls文件,这种方便快捷. function createtable($list,$filename){ header(& ...

  6. python操作excel表格文件--使用xlrd模块

    原文: http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 引言: 实际工作中,可能很多情况下都会用到excel表格,像如果不需 ...

  7. 在网页中预览excel表格文件

    项目需求在前端页面中实现预览excel表格的功能,上网了解之后大致总结为一下几种方法. 1.office文档转换为pdf,再转swf,然后通过网页加载flash进行预览 2.通过 xlsx.js,js ...

  8. Python 处理 CSV/EXCEL 表格文件

    只想说,数据挖掘工作,80%时间都花在处理数据上了,这句话真不假! 最近和小伙伴组了个队参加数据分析比赛,记录下我处理 csv 文件的一些步骤吧: 修改csv文件 可以用csv模块1,官方文档2 im ...

  9. 把txt文件中的json字符串写到plist文件中

    - (void)json2Plist { NSString *filePath = [self applicationDocumentsDirectoryFileName:@"json&qu ...

随机推荐

  1. robotium

    Test run failed: Permission Denial: starting instrumentation ComponentInfo{android.support.v7.appcom ...

  2. C++之面向对象初探----对象管理模型(关键是this指针)

    前言 c++对象模型可以概括为以下2部分 1.语言中直接支持面向对象程序员设计部分,主要涉及如构造函数.析构函数.虚函数.继承(单继承.多继承.虚继承).多态等待. 2.对于各种支持的底层实现机制 在 ...

  3. Summit Online Judge

    题意: 询问将取值在 $[L,R]$ 的若干个整数相加,可以得到 $[x,y]$ 区间内多少个数字. 解法: 只需要考虑求 $[L,R]$ 的数字能凑出 $[1,n]$ 的多少个数字,即可得出答案. ...

  4. IP地址库解析——读取IP地址获得实际地理位置信息的java源码实现

    说明:IP地址库来自QQwry.dat数据库文件,通过解析地址库当中的ip,已经细化最后获取的信息:获取ip地址对应的:国家 / 省 / 市 / 运营商ISP信息. 解析主要用到三个类: (1) IP ...

  5. 八大排序算法java代码

    1.冒泡排序 public static void main(String[] args) { int[] arr = {1,4,2,9,5,7,6}; System.out.println(&quo ...

  6. HDU - 1272 小希的迷宫 并查集判断无向环及连通问题 树的性质

    小希的迷宫 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一 ...

  7. 洛谷1601 A+B Problem(高精) 解题报告

    洛谷1601 A+B Problem(高精) 本题地址:http://www.luogu.org/problem/show?pid=1601 题目背景 无 题目描述 高精度加法,x相当于a+b pro ...

  8. C++多态性:虚函数的调用原理

    多态性给我们带来了好处:多态使得我们可以通过基类的引用或指针来指明一个对象(包含其派生类的对象),当调用函数时可以自动判断调用的是哪个对象的函数. 一个函数说明为虚函数,表明在继承的类中重载这个函数时 ...

  9. HDU2852【树状数组+二分】

    额..有点遗忘了树状数组特性了..印象中一直是前缀和,然后一定要记住树状数组是把给出的值(值太大可能可以离散化)也就是点到了区间,然后这个点存的值就是由自己来定了. 题意: 百度. 思路: 树状数组是 ...

  10. POJ2406【KMP-next数组】

    关于next的解释原文:点点点 //#include <bits/stdc++.h> #include<cstdio> #include<string.h> #in ...