1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java 文件格式解析JSON数据(其二)

java 文件格式解析JSON数据(其二)

时间:2020-06-23 22:48:05

相关推荐

java 文件格式解析JSON数据(其二)

个人用途使用,用于将文件解析成JSON格式。

import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.epam.parso.Column;import com.epam.parso.SasFileReader;import com.epam.parso.impl.SasFileReaderImpl;import org.apache.log4j.Logger;import org.ponent;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;//省略类文件名,自己弄一下,以上为所有需要的包Logger logger=Logger.getLogger(Class.class);/*** @param file 需要解析的Sas文件* 这里获取数据* json数据格式 文件名.列名type:data type为数据类型,自定义*/public JSONArray readSas(File file,String filenames) {//获取数据集合List<Object[]> list = new ArrayList<>();//获取头部行数据List<String> header=new ArrayList<>();InputStream is=null;try {is=new FileInputStream(file);//将文件输入到流解析//创建SasFileReader类的变量,并指示包含SAS7BDAT文件的InputStream作为 //SasFileReader构造函数中的参数SasFileReader sasFileReader = new SasFileReaderImpl(is);//获取SAS7BDAT文件的属性sasFileReader.getSasFileProperties();//获得SAS7BDAT列的描述List<Column> next=sasFileReader.getColumns();//根据列类型判断使用什么方法解析数据for(Column temp:next) {String type=temp.getType().toString();if("Number".equals(type.substring(type.lastIndexOf(".")+1))){header.add(temp.getName()+"01");}else{header.add(temp.getName()+"00");}}int size = header.size();String headName=null;String type=null;//判断列名是否包含特殊字符,包含则自定义列名 第n列for(int i = 0; i < size; i++){headName=header.get(i).substring(0,header.get(i).length()-2).trim();if(headName.length() > 0){if(!isLetterDigitOrChinese(headName.substring(0,1))){type=header.get(i).substring(header.get(i).length()-2);header.set(i,"第"+(i+1)+"列"+type);}}else{type=header.get(i).substring(header.get(i).length()-2);header.set(i,"第"+(i+1)+"列"+type);}}Object[] data=null;//获取所有数据while((data=sasFileReader.readNext()) != null){//添加数据集合list.add(data);}}catch(Exception e){e.printStackTrace();}finally{try{is.close() ;}catch (Exception e){e.printStackTrace();logger.trace("InputStream closure error");}}return readSasContent(list,header,filenames);}/*** 将读取出来的数据转换为Json* 这里定义json添加的key形式和data数据处理* @param list数据集合* @param header 列名* @param fileName 文件名* @return*/public JSONArray readSasContent(List<Object[]> list,List<String> header, String fileName) {JSONArray resJson = new JSONArray();JSONObject jsonObj = null;int size = list.size();int cloumnSize = header.size();//循环处理每条数据for (int i = 0; i < size; i++) {jsonObj = new JSONObject(true);Object[] cellValue = list.get(i);//System.out.print(cellValue.length);for (int j = 0; j < cloumnSize; j++) {jsonObj.put(fileName + "." + header.get(j), cellValue[j]);}//System.out.println(jsonObj.toJSONString()); 打印数据,检查resJson.add(jsonObj);}//System.out.println(list.size());//System.out.println(resJson.size());//下面四行个人需要,看业务来JSONObject sasJson = new JSONObject();sasJson.put(fileName, resJson);JSONArray sasArr = new JSONArray();sasArr.add(sasJson);return sasArr;}/*** 判断是否包含字母或数字或中文 用于生成列名* @param str* @return*/public boolean isLetterDigitOrChinese(String str) {String regex = "^[a-z0-9A-Z\u4e00-\u9fa5]+$";//其他需要,直接修改正则表达式就好return str.matches(regex);}

以下为特殊所需要的Jar包

<dependency>

<groupId>com.epam</groupId>

<artifactId>parso</artifactId>

<version>2.0</version>

</dependency>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。