java实现读取json文件指定字段值


使用场景

现有一个大数据的json文件,每条数据有多层数据信息。现在想把其中某个字段提取并叠加计算。

json文件格式

 1 {
 2   "MsgID":"111",
 3   "TaskData":{
 4   "TaskID":1,
 5   "RouteData":{
 6     "OrgPt":{"Angle":180...},
 7     "ExtendField":{"High":"580"...},
 8     "RoutePts":[],
 9     "NumOfPoints":231,
10      "BIMMapCode":"P000011"
11   }
12   }
13 }
14 
15 
16 其中,第三层的字段RoutePts数组内容如下:
17 {
18         "Order":1,
19         "Angle":90,
20         "X":11969,
21         "WorkState":1,
22         "Y":5270,
23         "Z":0,
24         "WorkData":[
25           {
26             "RS":25,
27             "PointCount":4,
28             "Type":1,
29             "WallNumber":2,
30             "Points":[
31               [
32                 650,
33                 -310,
34                 2271
35               ],
36               [
37                 650,
38                 -310,
39                 1575
40               ],
41               [
42                 650,
43                 -310,
44                 869
45               ],
46               [
47                 650,
48                 -310,
49                 275
50               ]
51             ],
52             "BeamInfo":[],
53             "WallThickness":200,
54             "RL":25,
55             "Exterior":0
56           }
57         ]
58       },
59 {
60         "Order":2,
61         "Angle":90,
62         "X":12470,
63         "WorkState":0,
64         "Y":5270,
65         "Z":0,
66         "WorkData":[]
67       }

我们要提取RoutePts里面的PointCount字段并叠加计算,因为存在有些值为空,所以要筛选该字段。

导入依赖

在pom.xml文件里加上fastjson

 

 

 

代码实现

读取本地json文件的方法

 1 //读取json文件
 2     public static String readJsonFile(String fileName) throws IOException {
 3         String jsonStr="";
 4         try{
 5             File jsonFile=new File(fileName);
 6             FileReader fileReader=new FileReader(jsonFile);
 7             Reader reader=new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
 8             int ch=0;
 9             StringBuffer sb=new StringBuffer();
10             while ((ch=reader.read())!=-1){
11                 sb.append((char)ch);
12             }
13             fileReader.close();
14             reader.close();
15             jsonStr=sb.toString();
16             return jsonStr;
17         } catch (FileNotFoundException e) {
18             e.printStackTrace();
19             return null;
20         }
21     }

读取指定字段

先把json文件放在resourses下面(直接复制到resourses)

 

 

 1 public static void main(String[]args) throws ParseException, IOException {
 2         String path=luogandong.class.getClassLoader().getResource("package.json").getPath();
 3         String s=readJsonFile(path);  //读取resource里面json文件
 4         JSONObject jobj = JSON.parseObject(s);  //获取整个json文件对象
 5         System.out.println("MsgID"+jobj.get("MsgID"));
 6         JSONObject s1=jobj.getJSONObject("TaskData");  //获取第二层TaskData对象
 7         JSONObject s2=s1.getJSONObject("RouteData");   //获取第三层RouteData对象
 8         Integer s3=(Integer) s1.get("TaskID");
 9         Integer s4=(Integer)s2.get("NumOfPoints");
10         String s7=(String)s2.get("BIMMapCode") ;
11         System.out.println("TaskID"+s3);
12         System.out.println("NumOfPoints"+s4);
13         System.out.println("BIMMapCode"+s7);
14 
15         JSONArray links=s2.getJSONArray("RoutePts");  //获取RoutePts数组对象
16 
17         System.out.println("输入起始站点:");
18         Scanner input1=new Scanner(System.in);
19         int h=input1.nextInt();
20 
21         System.out.println("输入结束站点:");
22         Scanner input=new Scanner(System.in);
23         int j=input.nextInt();
24 
25         int s5=0;
26 
27         for(int i=h-1;i<j;i++){
28             JSONArray links1=links.getJSONObject(i).getJSONArray("WorkData");  //获取第几个站点的workdata数组对象
29             if(links1.isEmpty()||links1.size()<1){
30                 System.out.println("[info]----"+(i+1)+"站点是非工作点,没有孔洞"+"----");   //判断数组是否为空,空则不计算
31             }else {
32                 int s6=links1.getJSONObject(0).getIntValue("PointCount");  //获取数组里面第二个字段的值
33                 //int s8=s6.getIntValue();
34                 s5+=s6;   //累计叠加
35                 System.out.println("[info]----"+(i+1)+"站点有"+s6+"孔洞,"+h+"站点到"+(i+1)+"站点一共有"+s5+"个孔洞"+"----");
36             }
37 
38         }
39     }

运行结果

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM