json转Excel

本文介绍了一个实用的Java工具类,用于将JSON数据转换成Excel文件。该工具首先解析JSON字符串,提取关键信息如类型、尺寸等,并将其映射到预定义的数据模型中。随后,这些数据被写入到一个Excel工作表里,方便用户进一步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.pl.dcloud.xmlParse;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


import javax.annotation.Resource;


import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;


import org.apache.commons.lang.StringUtils;
import org.junit.Test;


import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import com.pl.dcloud.model.ResourceType;
import com.pl.dcloud.service.ResourceTypeService;
import com.pl.test.BaseTester;




public class JosnToExcel extends BaseTester {

@Resource
private  ResourceTypeService rService;
/**
* 生成Excel
* Created by dx-ycw on 2017/05/26
* @return
*/


@SuppressWarnings({ "unchecked", "resource" })
public Map<String,String> partWord(File file){
Map<String, String> map2 = new HashMap<String, String>();



Map<String, Object> m = new HashMap<String, Object>();
List<ResourceType> resourceTypes = rService.getAllList();
for (ResourceType r : resourceTypes) {
m.put(r.getCode()+"-"+r.getSubCode(), r);
}

InputStream in = null;


try{
in = new FileInputStream(file);//得到文件流,File file = new File("E:\\test\\20170605\\data.json");


BufferedReader br = new BufferedReader(new InputStreamReader(in));


String str;


while((str = br.readLine()) != null){
str = StringUtils.substring(str, str.indexOf('{') + 1,str.length());
Gson gson = new Gson(); 

//json字符串转换Map集合
Map<String, Object> map = gson.fromJson(str, HashMap.class);//解析语句
//System.out.println(map.size());
Set<String> key = map.keySet();
Iterator<String> iter = key.iterator();
while (iter.hasNext()) {
String field = iter.next();
if (field.equalsIgnoreCase("objects")){
//System.out.println(field + ":" + map.get(field));
JSONArray jsonArray = JSONArray.fromObject(map.get(field));
for (int i=0;i<jsonArray.size();i++){
Object meta = jsonArray.getJSONObject(i).get("meta");
if (meta != null){
//System.out.println(jsonArray.getJSONObject(i).get("meta"));
JSONObject jObj =JSONObject.fromObject(meta);
String typeStr = String.valueOf(jObj.get("type"));
String typeSubStr = String.valueOf(jObj.get("subType"));
ResourceType r= (ResourceType) m.get(typeSubStr+"-"+typeStr);
map2.put("typeStr", typeStr);

JSONObject sizeObject = JSONObject.fromObject(jObj.get("size"));
if (sizeObject != null){
String width = String.valueOf(sizeObject.get("width"));
String height = String.valueOf(sizeObject.get("height"));
String depth = String.valueOf(sizeObject.get("depth"));
System.out.println("width");
System.out.println(sizeObject.get("height"));
System.out.println(sizeObject.get("depth"));
map2.put("width", width);
map2.put("height", height);
map2.put("depth", depth);
}
}
}
}
}
}
return map2;
}catch(Exception e){
e.printStackTrace();
}
return map2;
}


//然后将解析出来的放到eXCEL表中
public static void writeExcel(String path, Map<String, String> content,String sheetName, int sheetNum, int startRow) {
try {
// 打开文件
WritableWorkbook book = Workbook.createWorkbook(new File(path));
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet(sheetName, sheetNum);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// 以及单元格内容为test
int start = startRow;
for (String key : content.keySet()) {


Label label1 = new Label(0, start, key);


Label label2 = new Label(1, start, content.get(key));


// 将定义好的单元格添加到工作表中


sheet.addCell(label1);


sheet.addCell(label2);


start++;
}
// 写入数据并关闭文件
book.write();
book.close();
} catch (Exception e) {
System.out.println(e);
}
}


@Test
public void test(){
// JosnToExcel jtx = new JosnToExcel();
// jtx.DCEecel();    //E:\\test\\20170527\\1b.json
writeExcel("E:\\test\\20170605\\data.xls",partWord(new File("E:\\test\\20170605\\data.json")), "BOM", 0, 1);
System.out.println("測試成功!!");
}

}


//json数据格式如图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值