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

需求:从接口中获取的一个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;
    }
}

原文地址:https://www.cnblogs.com/janson071/p/9648272.html

时间: 2024-10-12 10:15:58

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

gson解析通过okhttp获取的json格式数据(转载)

本文采用okhttp库获取聚合网提供的免费接口数据,完成一个手机号码归属地查询功能. 其请求接口格式如下: 数据返回结果: 首先添加gson和okhttp的引用,gson我是直接下载jar包的: compile 'com.squareup.okhttp3:okhttp:3.2.0' compile files('C:/Users/Administrator/AndroidStudioProjects/ExOkhttp/libs/gson-2.3.1.jar') 采用get方法,获取数据主要代码如

用安卓自带的原生方法解析从webservice获取的json数据

研究了oschina,获取的信息都是用xml的,感觉没json那么好,解析太复杂循环啥的,还有xml相对于json来说太多了,麻烦. 之前试过用geon还有fastjson但是老是报错.还是用原生自带的json方法.这里我来接受一组json数据 譬如我们想要获取一堆人员信息, [ {"username":"马晕","company":"albaba"}, {"username":"刘强西"

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

Document doc = Jsoup.parseBodyFragment(previewHtml); //html内容解析为Document int index = 0; StringBuffer stringBuffer = new StringBuffer(); Elements inputArray = doc.getElementsByTag("input");//对应的元素数组 for(int a=0;a<inputArray.size(); a++) { Elem

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

背景:通过接口访问数据,获取的内容是个标准的html格式,使用jsoup的方式获取页面元素值 先推荐比较好的博客:http://www.open-open.com/jsoup/. 单个案例比较不错 http://blog.csdn.net/u010814849/article/details/52526582  整合内容很多 1.插件下载并安装 官网安装地址:http://jsoup.org/packages/jsoup-1.8.1.jar 2.使用(目前都是用的css方式定位元素) 1.获取这

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

微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 本次的内容: 实现:分享到朋友圈,qq,qq空间,微信朋友的功能. 基础接口 判断当前客户端版本是否支持指定JS接口 wx.checkJsApi({ jsApiList: ['chooseImage'], // 需要检测的JS接

Java解析apk

概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文件的工具,借用终端shell调用命令解析输出信息; 代码: 这里贴出一些关键代码,并给出代码注释,如下 1 package com.apkutils; 2 3 import java.io.BufferedReader; 4 import java.io.Closeable; 5 import ja

C++ 与 php 的交互 之----- C++ 异步获取 网页文字内容,异步获取 php 的 echo 值。

转载请声明出处! http://www.cnblogs.com/linguanh/category/633252.html 距离上次 谈 C++ 制作json 或者其他数据传送给 服务器,时隔两个多月. 链接:http://www.cnblogs.com/linguanh/p/4340119.html 这次是从服务器上 中获取 文字内容到控制台,或者写入本地文本等操作,废话不多说,开讲. ------------------------------------------------------

C++ 与 php 的交互 之----- C++ 获取 网页文字内容,获取 php 的 echo 值。

转载请声明出处! http://www.cnblogs.com/linguanh/category/633252.html 距离上次 谈 C++ 制作json 或者其他数据传送给 服务器,时隔两个多月. 链接:http://www.cnblogs.com/linguanh/p/4340119.html 这次是从服务器上 中获取 文字内容到控制台,或者写入本地文本等操作,废话不多说,开讲. ------------------------------------------------------

Java多线程之~~~Callable接口获得返回值

ThreadPoolExecutor提供了另一个非常强有力的接口,那就是callable.这个接口和runnable类似,但是实现这个 接口的方法是call方法,这个方法是可以返回值的,弥补了runnable不能返回值的悲哀.而且这个方法可以配合ThreadP oolExecutor使用,获得Future接口,从这个接口的名字我们就能知道,返回的这个类似于指向这个线程的一个指针,我 们能通过这个Future接口知道当前线程的运行情况,包括是否已经完成任务,目前运行情况,运行完成后的返回值等, 而