博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fastjson解析文本
阅读量:4348 次
发布时间:2019-06-07

本文共 8071 字,大约阅读时间需要 26 分钟。

文本中的json格式

20170215 18:00:00.001-{"visitTime":"1487152800001","ip":"xx.xxx.xxx.xxx","params":"{\"encode\":\"utf-8\",\"xxx\":\"0.0\",\"xxxx\":\"6869679\",\"resType\":\"json\",\"ak\":\"xxxxxxxxxxxxxxxxxxxxxxx\",\"xxx\":\"98\",\"uri\":\"/xx/xxx\",\"out_coord_type\":\"xxx\",\"coord_type\":\"xxxx\",\"domain\":null,\"location\":\"xxxx,xxxxx\",\"enc\":\"utf-8\",\"pois\":\"1\"}","device":"xxxxxx","sid":"xxxx"}

代码(用的是阿里的fastjson包)

1 package com.entity;  2 import java.io.BufferedReader;  3 import java.io.BufferedWriter;  4 import java.io.File;  5 import java.io.FileNotFoundException;  6 import java.io.FileOutputStream;  7 import java.io.FileReader;  8 import java.io.FileWriter;  9 import java.io.IOException; 10 import java.io.PrintStream; 11 import java.math.BigDecimal; 12 import java.text.DecimalFormat; 13  14 import org.junit.Test; 15  16 import com.alibaba.fastjson.JSON; 17 import com.alibaba.fastjson.JSONObject; 18  19 public class ReadAndWrite { 20     public static void main(String[] args) { 21         excute("F:\\xxxx.log"); 22     } 23     public static void excute(String path){ 24         File file = new File(path); 25         BufferedReader reader = null; 26         String laststr = ""; 27         try { 28          //System.out.println("以行为单位读取文件内容,一次读一整行:"); 29          reader = new BufferedReader(new FileReader(file)); 30          String tempString = null; 31          int line = 1; 32          //一次读入一行,直到读入null为文件结束 33          while ((tempString = reader.readLine())!= null) { 34               //显示行号 35               //System.out.println("line " + line + ": " + tempString); 36               JSONObject parseObject = JSON.parseObject(tempString); 37               String string = parseObject.get("params").toString(); 38               JSONObject parseObject2 = JSON.parseObject(string); 39  40               //活动车辆id 41               String carID; 42               if(parseObject2.get("vhcid")==null){ 43                   String ip=parseObject.get("ip").toString(); 44                   String carID1=MD5Utils.md5(ip).substring(0, 5); 45                   int parseInt = Integer.parseInt(carID1, 16)+10000000; 46                   carID=String.valueOf(parseInt); 47               }else{ 48                   carID=parseObject2.get("vhcid").toString(); 49               } 50                51               //获得定位时间 52               String UTC1 = parseObject.get("visitTime").toString(); 53               long parseLong = Long.parseLong(UTC1); 54                55               double parse=parseLong/1000; 56               int parseInt=(int)parse; 57               String UTC=String.valueOf(parseInt); 58               //获得纬度和经度 59               String du; 60               if(parseObject2.get("location")!=null){ 61                   String du1=parseObject2.get("location").toString(); 62                   String[] split = du1.split(","); 63                   BigDecimal bd = new BigDecimal(split[0]); 64                   BigDecimal multiply = bd.multiply(new BigDecimal(100000)); 65                   DecimalFormat dcmFmt = new DecimalFormat("0.0"); 66                   //System.out.println(dcmFmt.format(multiply)); 67                   BigDecimal bd1 = new BigDecimal(split[1]); 68                   BigDecimal multiply1 = bd1.multiply(new BigDecimal(100000)); 69                   DecimalFormat dcmFmt1 = new DecimalFormat("0.0"); 70                   //System.out.println(dcmFmt1.format(multiply1)); 71                   72                   du=dcmFmt.format(multiply).substring(0,dcmFmt.format(multiply).length()-2 )+","+dcmFmt1.format(multiply1).substring(0, dcmFmt1.format(multiply1).length()-2); 73                    74               }else if(parseObject2.get("coords")!=null){ 75                   String du1=parseObject2.get("coords").toString(); 76                   String[] split = du1.split(","); 77                   BigDecimal bd = new BigDecimal(split[0]); 78                   BigDecimal multiply = bd.multiply(new BigDecimal(100000)); 79                   DecimalFormat dcmFmt = new DecimalFormat("0.0"); 80                   //System.out.println(dcmFmt.format(multiply)); 81                   BigDecimal bd1 = new BigDecimal(split[1]); 82                   BigDecimal multiply1 = bd1.multiply(new BigDecimal(100000)); 83                   DecimalFormat dcmFmt1 = new DecimalFormat("0.0"); 84                   //System.out.println(dcmFmt1.format(multiply1)); 85                   du=dcmFmt.format(multiply).substring(0,dcmFmt.format(multiply).length()-2 )+","+dcmFmt1.format(multiply1).substring(0, dcmFmt1.format(multiply1).length()-2); 86               }else{ 87                   du="00000000,00000000"; 88               } 89                90               //获得速度 91               String speed; 92               if(parseObject2.get("speed")==null){ 93                   speed="0"; 94               }else{ 95                   String speed1=parseObject2.get("speed").toString(); 96                   int db3=(int)Double.parseDouble(speed1); 97                   speed=String.valueOf(db3); 98               } 99               100               //获得方向101               String head;102               if(parseObject2.get("direction")!=null){103                   String head1=parseObject2.get("direction").toString();104                   int db3=(int)Double.parseDouble(head1);105                   head=String.valueOf(db3);106               }else if(parseObject2.get("dir")!=null){107                   String head1=parseObject2.get("dir").toString();108                   int db3=(int)Double.parseDouble(head1);109                   head=String.valueOf(db3);110               }else{111                   head="0";112               }113               114               115               116               //获得状态117               String status="1";118               //获得接收时间119               String time=UTC;120               //拼接字符串121               FileWriter fw = new FileWriter("F:\\mspVisitLog20170223.txt", true);122               BufferedWriter bw = new BufferedWriter(fw);123               if(du!="00000000,00000000"){124               StringBuilder sb = new StringBuilder();125               sb.append(carID).append(",").append(UTC).append(",").append(du).append(",").append(speed).append(",").append(head).append(",").append(status).append(",").append(time);126               String message = sb.toString();127             //bw.append("在已有的基础上添加字符串");128                bw.write(message+"\r\n");// 往已有的文件上添加字符串129                //bw.write("\r\n");130               //System.out.println(message);131               }132              133                134               line ++;135               System.out.println(line);136               bw.close();137               fw.close();138          }139                reader.close();140         } catch (IOException e) {141             e.printStackTrace();142         } finally {143              144              if (reader != null) {145                   try {146                    reader.close();147                   } catch (IOException e1) {148                   }149              }150         }151     }152     153     @Test154     public void WriteStringToFile() {155         //for(int i=0;i<=5;i++){
156 try {157 //File file = new File("F:\\test.txt");158 // PrintStream ps = new PrintStream(new FileOutputStream(file));159 // ps.println("http://www.jb51.net");// 往文件里写入字符串160 // ps.append("http://www.jb51.net");// 在已有的基础上添加字符串161 FileWriter fw = new FileWriter("F:\\test.txt", true);162 BufferedWriter bw = new BufferedWriter(fw);163 //bw.append("在已有的基础上添加字符串");164 bw.write("abc\r\n");// 往已有的文件上添加字符串165 bw.write("def\r\n");166 //bw.write("hijk ");167 bw.close();168 fw.close();169 } catch (Exception e) {170 // TODO Auto-generated catch block171 e.printStackTrace();172 }173 //}174 }175 }

 

转载于:https://www.cnblogs.com/yangming5423/p/6878403.html

你可能感兴趣的文章
Date、String和Timestamp类型转换
查看>>
计算机的组成
查看>>
CSS命名规范
查看>>
初始化构造函数中定义的实体集合,方便嵌套类型的遍历
查看>>
状压dpHDU - 4856
查看>>
java.nio.ByteBuffer 类 缓冲区
查看>>
PL/SQL系列1-PL/SQL介绍
查看>>
关于render函数的总结
查看>>
JavaScript 小刮号
查看>>
BZOJ USACO 银组 水题集锦
查看>>
Android为TV端助力 Linux命令查看包名类名
查看>>
【zabbix】自动注册,实现自动发现agent并添加监控(agent不需要任何配置)
查看>>
[简单到爆]eclipse-jee-neon的下载和安装
查看>>
vector
查看>>
Redis学习之set类型总结
查看>>
栈和队列
查看>>
CSS2-3常见的demo列子总结一
查看>>
XML & JSON---iOS-Apple苹果官方文档翻译
查看>>
[洛谷P2123]皇后游戏
查看>>
数据挖掘之功能
查看>>