需求:从接口中获取的一个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. TC SRM 597 DEV2

    第一次玩TC的SRM,只完成了一题,有点失落,不过还是要把每个问题都研究清楚才是我的本性,呵呵 第一题思路: 任意一个数,不断除掉2以后的剩下的数若相同则YES否则NO 第二题: 最开始判断字母个数是 ...

  2. Google Closure Compiler 高级模式及更多思考(转)

    前言 Google Closure Compiler 是 Google Closure Tools 的一员,在 2009 年底被 Google 释出,早先,有 玉伯 的 Closure Compile ...

  3. c++ class does not name a type (转载)

    转载:http://blog.csdn.net/typename/article/details/7173550 declare class does not name a type 出现这个编译错误 ...

  4. bzoj 1878: [SDOI2009]HH的项链【树状数组】

    对于一个lr,每个颜色贡献的是在(1,r)区间里出现的最右位置,所以记录一个b数组表示当前点这个颜色上一个出现的位置 然后把询问离线,按r升序排序 每次把右端点右移,把这个点在树状数组上+1,并且在当 ...

  5. 使用 typescript 和 canvas 重构snow效果

    前言:之前做过一个 snow 效果,但是是直接用 HTML 做的点击此处查看 ,几个星期前,我用 typescript 和 canvas 重构了一下, snow效果是一个很简单的效果,但是用来练手还是 ...

  6. CSMA/CA协议

    802.11中采用CSMA/CA协议来规定多个工作节点共用信道的问题. CSMA/CA的全称是Carrier sense multiple access with collision avoidanc ...

  7. [Code+#1]大吉大利,晚上吃鸡!

    输入输出样例 输入样例#1: 7 7 1 7 1 2 2 2 4 2 4 6 2 6 7 2 1 3 2 3 5 4 5 7 2 输出样例#1: 6 输入样例#2: 5 5 1 4 1 2 1 1 3 ...

  8. 大数高精度加减乘除 51nod 1005 大数加法

    1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出2个大整数A,B,计算A+B的结果. Input 第1行:大数A 第2行:大数B ...

  9. 通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题

    1.问题假设: 在B机中IP地址与子网掩码都固定,网关是路由器的LAN口的IP地址,我们希望通过路由器来实现B机与A机之间的单向通讯问题,也就是说B可以ping通A且可以访问A提供的FTP站点. 2. ...

  10. 234 Palindrome Linked List 回文链表

    请检查一个链表是否为回文链表. 进阶:你能在 O(n) 的时间和 O(1) 的额外空间中做到吗? 详见:https://leetcode.com/problems/palindrome-linked- ...