需求:从接口中获取的一个json数组中有多个对象,每个对象中的值并非都需要,只需查出标题中的几项对应的值即可。且还需要按某个字段排序后依次写到excel

实现方法如下:

package jansonDemo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.util.*; public class TestJsonToExcel {
public static void main(String[] args) {
XSSFWorkbook workbook;
XSSFSheet sheet;
XSSFRow row;
XSSFCell cell; //创建excel工作薄
workbook = new XSSFWorkbook();
//创建一个工作表sheet
sheet = workbook.createSheet("stationInfo");
//创建第一行
row = sheet.createRow(0);
//创建一个单元格
cell = null; //定义标题栏,放到数组中
String stationInfo_title[] =
{"Pictures","StationLng","SiteGuide","Address","ServiceTel",
"SupportOrder","OperatorID","StationID","Remark"}; //在第一行插入标题栏
for (int i=0;i<stationInfo_title.length;i++) {
cell = row.createCell(i);
cell.setCellValue(stationInfo_title[i]);
} //接着从第二行开始写入内容:
//根据标题栏中的字段筛选相应的值,并非是获取所有接口返回的值
CommonFunc cf = new CommonFunc();
try {
int rownum = 1;
String cellContent = "";
JSONObject decrptobj = cf.getStationInfo(); //获取从接口返回的json对象
JSONArray stationArray = decrptobj.getJSONArray("StationInfos");
JSONArray sortedstationArray = sortJsonArray(stationArray,"StationID"); //调用排序方法,对json数组中的对象排序
for (int j=0; j<sortedstationArray.size(); j++) {
row = sheet.createRow(rownum); //json数组中有多少对象就依次为每个对象创建一行
JSONObject bodyObj = sortedstationArray.getJSONObject(j);
for (int k=0; k<stationInfo_title.length; k++) {
cellContent = bodyObj.getString(stationInfo_title[k]);
cell = row.createCell(k); //创建单元格,即生成每行对应的列,新的一行每个单元格从0计数
cell.setCellValue(cellContent); //给每行的单元格赋值,组成每列的值
}
rownum ++;
} }catch (Exception e) {
e.printStackTrace();
} //创建一个文件
File file = new File("D:\\javaExample\\file\\stationInfo.xlsx");
try {
if(!file.exists()) {
file.createNewFile();
}
//创建输出流
OutputStream outputStream = new FileOutputStream(file);
//将拼好的内容通过输出流写到excle
workbook.write(outputStream);
//关闭输出流
outputStream.close();
}catch (Exception e) {
e.printStackTrace();
}
} //专门写一个对JSONArray排序的方法
public static JSONArray sortJsonArray(JSONArray jsonArray, final String sortKey) {
List<JSONObject> list = new ArrayList<>();
for (int i=0; i<jsonArray.size(); i++) {
list.add(jsonArray.getJSONObject(i));
}
Collections.sort(list, new Comparator<JSONObject>() {
String key = sortKey;
@Override
public int compare(JSONObject o1, JSONObject o2) {
String str1 = o1.getString(key);
String str2 = o2.getString(key);
return str1.compareTo(str2);
}
});
//先清空原有数组
jsonArray.clear(); //将排序好的JSONObject放到JSONArray里
for (int j=0; j<list.size(); j++) {
jsonArray.add(list.get(j));
} return jsonArray;
}
}

java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)的更多相关文章

  1. 请求接口获取的json 字符串 前后不能有 双引号

    请求接口获取的json 字符串 前后不能有 双引号 否则JSON.parse 转换会报错

  2. 谁说java里面有返回值的方法必须要有返回值,不然会报错????

    慢慢的总是发现以前的学得时候有些老师讲的不对的地方! 所以还是尽量别把一些东西说的那么绝对,不然总是很容易误导别人,特别是一些你自己根本就没有试过的东西,然后又斩钉截铁的告诉别人,这样不行,肯定不行什 ...

  3. java解析xml实例——获取天气信息

    获取xml并解析其中的数据: package getweather.xml; import java.io.IOException; import java.util.HashMap; import ...

  4. JAVA解析HTML,获取待定元素属性

    Document doc = Jsoup.parseBodyFragment(previewHtml); //html内容解析为Document int index = 0; StringBuffer ...

  5. Java解析html页面,获取想要的元素

    背景:通过接口访问数据,获取的内容是个标准的html格式,使用jsoup的方式获取页面元素值 先推荐比较好的博客:http://www.open-open.com/jsoup/. 单个案例比较不错 h ...

  6. java web获取请求体内容

    Java Web中如何获取请求体内容呢? 我们知道请求方式分为两种:Get,Post. /*** * Compatible with GET and POST * * @param request * ...

  7. flutter 从接口获取json数据显示到页面

    如题,在前端,是个很简单的ajax请求,json的显示,取值都很方便,换用dart之后,除了层层嵌套写的有点略难受之外,还有对json的使用比js要麻烦 1. 可以参照 flutter-go 先封装一 ...

  8. 第九篇 :微信公众平台开发实战Java版之如何实现自定义分享内容

    第一部分:微信JS-SDK介绍 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统 ...

  9. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

随机推荐

  1. LightTable的结构(二)

    这节主要研究下object的一个属性,behaviors 定义一个behavior需要提供name,trigger,reaction (behavior ::on-close-destroy :tri ...

  2. Tarjan求桥

    传送门(poj3177) 这道题是Tarjan求桥的模板题.大意是要求在原图上加上数量最少的边,使得整张图成为一个边双联通分量. 具体的做法是,先在图中求出所有的桥,之后把边双联通分量缩成点,这样的话 ...

  3. 4-2 买家类目-dao(下)

    查询出来的对象ProductCategory就已经有updateTime和createTime了,然而你只是把对象的categoryType给修改了一下,修改之后就执行save方法保存了.所以它还是原 ...

  4. 理解C#泛型(转)

    理解C#泛型 http://www.cnblogs.com/wilber2013/p/4292240.html 泛型中的类型约束和类型推断 http://www.cnblogs.com/wilber2 ...

  5. 【WIP】C基础语法

    创建: 2017/06/17 更新: 2017/10/14 标题加上[WIP],增加创建时间 更新: 2018/02/05 被Objective-C引用部分加上id方便链接,代码放进代码模板      ...

  6. 洛谷P3371 【模板】单源最短路径(弱化版)(SPFA解法)

    题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输 ...

  7. java dom4j xml生成,解析

    1. 用Java代码生成xml文档 package com.test.dom; import java.io.FileOutputStream; import java.io.IOException; ...

  8. 莫队算法/二分查找 FZU 2072 Count

    题目传送门 题意:问区间内x的出现的次数分析:莫队算法:用一个cnt记录x的次数就可以了.还有二分查找的方法 代码: #include <cstdio> #include <algo ...

  9. 题解报告:hdu 2588 GCD(欧拉函数)

    Description The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written ...

  10. SpringBoot-redis-session

    配置pom <parent> <groupId>org.springframework.boot</groupId> <artifactId>sprin ...