json解析
来源:互联网 发布:算法统宗校释 编辑:程序博客网 时间:2024/04/30 04:02
380万条的json格式的数据进行解析
数据格式如下:
{
"_id" : "b454e650cb1a4fa4a2f2bd6899fbfa73",
"bb" : "116.2451019,39.8486099,116.2451019,39.8486099",
"pts" : [{
"1" : 0,
"2" : 39.8486099,
"3" : 116.2451019,
"4" : 0.0,
"5" : 0.0,
"6" : "2012-03-07 14:25:08",
"7" : "2012-03-07 14:25:10",
"8" : "2",
"9" : 0.0,
"10" : 1
}, {
"1" : 1,
"2" : 39.8486099,
"3" : 116.2451019,
"4" : 0.0,
"5" : 0.0,
"6" : "2012-03-07 14:25:16",
"7" : "2012-03-07 14:25:17",
"8" : "1",
"9" : 0.0,
"10" : 1
}, {
"1" : 2,
"2" : 39.8486099,
"3" : 116.2451019,
"4" : -1.0,
"5" : 0.0,
"6" : "2012-03-07 14:25:18",
"7" : "2012-03-07 14:25:20",
"8" : "1",
"9" : 0.0,
"10" : 1
}]
}
获取“_id”值和“bb”属性值(两点的经纬度坐标),获取“pts”属性中第一个标签6的值(起始时间)和最后一个标签7的属性值(终止时间),并根据经纬度计算两点之间的距离,根据起始时间和终止时间计算其时间差,得到每个“_id”的对应的距离和时间差
private final double PI = 3.1415926; //圆周率private final static double earthRadius = 6371; //地球半径,单位为KMpublic static void parseJson(BufferedReader bufferedReader) throws IOException, ParseException, java.text.ParseException{String line = ""; //一行一行的形式读取文件String[] pts6FirstTime =null;//第一个坐标点标签6的时间String pts6Time ="";String ptsTime7 = "";String reslut = ""; //计算最终结果double betweenTime = 0.0d;//轨迹点之间的时间差,以小时(h)为单位//longitude1、longitude2、dimension1、dimension2分别为经度坐标和维度坐标double longitude1 = 0.0d;double dimension1 = 0.0d;double longitude2 = 0.0d;double dimension2 = 0.0d; //设置时间格式DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//创建json解析对象JSONParser jsonParser = new JSONParser();//创建一个distanceAndTime对象DistanceAndTime distanceAndTime = new DistanceAndTime();while((line = bufferedReader.readLine())!=null){//开始解析JSONObject jsonObject = (JSONObject)jsonParser.parse(line);String _id = (String) jsonObject.get("_id");//得到轨迹的id号String bb = (String) jsonObject.get("bb");//得到轨迹的经纬度坐标bb//经纬度坐标是以","进行分割的String[] longitudeDismension = bb.split(",");//Double.valueOf()把string类型转换为double类型longitude1 = Double.valueOf(longitudeDismension[0]);dimension1 = Double.valueOf(longitudeDismension[1]);longitude2 = Double.valueOf(longitudeDismension[2]);dimension2 = Double.valueOf(longitudeDismension[3]);//计算具有经纬度的两坐标间的距离double bbDistance = distanceAndTime.getDistance(longitude1, dimension1, longitude2, dimension2);//解析pts中的内容JSONArray ptsjsonArray = (JSONArray)jsonObject.get("pts");Iterator iterator = ptsjsonArray.iterator();//解析pts中标签6的内容,并得到第一个标签6的内容while(iterator.hasNext()){JSONObject pts6JSONObject = (JSONObject)iterator.next();pts6Time = pts6JSONObject.get("6").toString();pts6FirstTime = pts6Time.split("\r\n");break;//对于标签6的时间,只要第一个时间}//解析pts中标签7的内容,并得到最后一个标签7的内容while(iterator.hasNext()){JSONObject pts7jsonobject = (JSONObject)iterator.next();ptsTime7 = pts7jsonobject.get("7").toString();}//计算轨迹的时间差,单位为小时(H)Date date1 = dateFormat.parse(ptsTime7);Date date2 = dateFormat.parse(pts6FirstTime[0]);betweenTime = (date1.getTime()-date2.getTime())/1000.0/3600.0;reslut = _id+"\t"+bbDistance+"\t"+betweenTime;writeToLocal(reslut);//System.out.println(reslut);}}//已知经纬度的轨迹点,计算两个轨迹点之间的距离,单位为KMpublic double getDistance(double longitude1,double dimension1,double longitude2,double dimension2){double x,y,distance;x = (longitude1 - longitude2)*PI*earthRadius*Math.cos(((dimension1+dimension2)/2)*PI/180)/180;y = (dimension1-dimension2)*PI*earthRadius/180;distance = Math.hypot(x, y);return distance;}//计算结果输出public static void writeToLocal(String string) throws IOException{File outFile = new File("D://0820--Study//轨迹点数据//result.json");if (!outFile.exists()) {outFile.createNewFile();}//FileOutputStream设置为true,是为了后一条结果记录覆盖前一条结果记录FileOutputStream fileOutputStream = new FileOutputStream(outFile,true);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);bufferedWriter.write(string);bufferedWriter.newLine();bufferedWriter.flush();bufferedWriter.close();outputStreamWriter.close();fileOutputStream.close();}
- 【JSON解析】JSON解析
- 解析JSON
- Json解析
- JSON解析
- JSON解析
- json解析
- Json解析
- Json解析
- JSON解析
- Json解析
- Json解析
- JSON解析
- JSON解析
- json 解析
- Json解析
- JSON解析
- json解析
- json 解析
- poj1942求组合数
- iOS 自定义分区头加上图片 以及导航控制器 颜色随滑动改变
- HDU - 4006 The kth great number (set&数据结构)
- SpringMVC 获得应用的绝对路径
- 如何使用libcurl实现HTTP的GET方法获取文件长度
- json解析
- Android自定义控件+popuwindow下拉菜单的实现仿58下拉菜单
- ANR traces分析 系统一直出现 waiting for ...日志
- CentOs7 开启网络连接
- 正确使用iOS常量(const)、enum以及宏(#define)
- Linux workqueue工作原理
- 二进制求和
- MySQL簇--mysql集群搭建
- hdu 2586 How far away ? lca 在线和离线算法