json格式值班表解析
这几天因为一些特殊原因,网站值班表不能用,一旦出现问题,找相应系统的值班人员,就比较困难了,但通过一些渠道,可以有一个文本文件,其中包含了这几天的值班信息,为了更明白的说明问题,我们假设有A系统和B系统,两个值班,其中A系统值班人员为,每人值一天,
B系统值班人员为,每人值一天,
json格式的文件,准确的说,应该是json数组,如下所示,
{
"dlist": [
{
"dId": "1743664",
"dName": "A值班",
"dPerson": "梅西",
"dEmail": "abc@abc.com",
"dPhone": "10000000000",
"startDate": "2017-09-02 08:00:00",
"endDate": "2017-09-02 18:00:59"
},
{
"dId": "1850998",
"dName": "B值班",
"dPerson": "C罗",
"dEmail": "xyz@xyz.com",
"dPhone": "10000000001",
"startDate": "2017-09-02 00:00:01",
"endDate": "2017-09-03 00:00:00"
},{
"dId": "1743600",
"dName": "A值班",
"dPerson": "内马尔",
"dEmail": "jhk@jhk.com",
"dPhone": "10000000002",
"startDate": "2017-09-03 08:00:00",
"endDate": "2017-09-04 18:00:59"
},
{
"dId": "1850901",
"dName": "B值班",
"dPerson": "阿扎尔",
"dEmail": "lox@lox.com",
"dPhone": "10000000003",
"startDate": "2017-09-03 00:00:01",
"endDate": "2017-09-04 00:00:00"
}]
}
其实从这个文件中,直接使用ctrl+f,也能实现检索,但毕竟稍微不方便一些,另外就是想练练手,于是乎就考虑,清理一下格式,让其看起来更可读一些。
既然是json,那么就需要解析json,json解析器很多,这里则用了gson,
GSON是Google开发的Java API,用于转换Java对象和Json对象。更多关于GSON的API可以访问:http://sites.google.com/site/gson/.
最高版本是2.8,可以从以下网址,查看maven配置,或者直接下载jar,
http://www.mvnrepository.com/artifact/com.google.code.gson/gson
maven配置,
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.0</version>
</dependency>
使用gson解析json数据,可以分为三步,
1. 首先需要创建Gson解析器。
2. 创建JSONObject对象。
3. 将json数据转为为相应的数据。
咱直接上代码,
package com.bisal.zb;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;import com.google.gson.JsonArray;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;public class ZB_1 {
public static void main(String[] args) {
try {
JsonParser parser = new JsonParser(); // 创建JSON解析器
JsonObject object = (JsonObject) parser.parse(new FileReader(
"file/zhiban.log")); // 创建JsonObject对象
JsonArray array = object.get("dlist").getAsJsonArray();// 得到为json的数组
FileWriter writer = new FileWriter("file/output1.txt");
String dName;
String dPerson;
String dEmail;
String dPhone;
String dDate;
for (int i = 0; i < array.size(); i++) {
JsonObject subObject = array.get(i).getAsJsonObject();
dutyName = subObject.get("dName").getAsString();
dutyPerson = subObject.get("dPerson").getAsString();
dutyPhone = subObject.get("dPhone").getAsString();
dutyEmail = subObject.get("dEmail").getAsString();
dutyDate = subObject.get("startDate").getAsString()
.substring(0, 10);
writer.write("日期=[" + dDate + "] 值班项=[" + dName
+ "] 值班人=[" + dPerson + "] 邮箱=[" + dEmail
+ "] 电话=[" + dPhone + "]\n");
}
writer.close();
} catch (JsonIOException e) {
e.printStackTrace();
} catch (JsonSyntaxException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解析json后,写入文件中,输出文件内容,
日期=[2017-09-02] 值班项=[A值班] 值班人=[梅西] 邮箱=[abc@abc.com] 电话=[10000000000]
日期=[2017-09-02] 值班项=[B值班] 值班人=[C罗] 邮箱=[xyz@xzy.com] 电话=[10000000001]
日期=[2017-09-03] 值班项=[A值班] 值班人=[内马尔] 邮箱=[jkh@jkh.com] 电话=[10000000002]
日期=[2017-09-03] 值班项=[B值班] 值班人=[阿扎尔] 邮箱=[lox@lox.com] 电话=[10000000003]
注意,这里是按照时间排序,同一个值班,每天都有,因此同一个值班,位置不是相邻的,我们日常检索,往往根据值班项,直接定位某一天的值班人员,所以可以据此做一些处理,按照值班项排序。
为了排序,首先定义一个实体类,重要的是,继承Comparable接口,重写compareTo方法,为的就是按照值班项dName,进行排序,此处为按照中文字符排序。
package com.bisal.zb;
public class ZBObject implements Comparable {
private String dutyName;
private String dutyPerson;
private String dPhone;
private String dEmail;
private String dDate;public String getDName() {
return dName;
}public void setDName(String dName) {
this.dName = dName;
}public String getDPerson() {
return dPerson;
}public void setDPerson(String dPerson) {
this.dPerson = dPerson;
}public String getDPhone() {
return dPhone;
}public void setDPhone(String dPhone) {
this.dPhone = dPhone;
}public String getDEmail() {
return dEmail;
}public void setDEmail(String dEmail) {
this.dEmail = dEmail;
}public String getDDate() {
return dDate;
}public void setDDate(String dDate) {
this.dDate = dDate;
}@Override
public int compareTo(Object o) {
ZBObject zbo = (ZBObject)o;
String otherDName = zbo.getDName();
return this.dName.compareTo(otherDName);
}
}
解析json,将每一项数据,存储于ZBObject对象,用Collections.sort()方法,进行排序,
package com.bisal.zb;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import com.google.gson.JsonArray;
import com.google.gson.JsonIOException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;public class ZB_2 {
public static void main(String[] args) {
try {
JsonParser parser = new JsonParser(); // 创建JSON解析器
JsonObject object = (JsonObject) parser.parse(new FileReader(
"file/zhiban.log")); // 创建JsonObject对象
JsonArray array = object.get("dutylist").getAsJsonArray();// 得到为json的数组
String dName = "";
String dPerson = "";
String dEmail = "";
String dPhone = "";
String dDate = "";
List<ZBObject> zbObjectList = new ArrayList<ZBObject>();
for (int i = 0; i < array.size(); i++) {
JsonObject subObject = array.get(i).getAsJsonObject();
dName = subObject.get("dName").getAsString();
dPerson = subObject.get("dPerson").getAsString();
dPhone = subObject.get("dPhone").getAsString();
dEmail = subObject.get("dEmail").getAsString();
dDate = subObject.get("startDate").getAsString()
.substring(0, 10);
ZBObject zbObject = new ZBObject();
zbObject.setDName(dName);
zbObject.setDPerson(dPerson);
zbObject.setDEmail(dEmail);
zbObject.setDPhone(dPhone);
zbObject.setDDate(dDate);
zbObjectList.add(zbObject);
}
FileWriter writer = new FileWriter("file/output2.txt");
Collections.sort(zbObjectList);
for (ZBObject zbo : zbObjectList) {
writer.write("值班项=[" + zbo.getDName() + "] 日期=[" + zbo.getDDate()
+ "] 值班人=[" + zbo.getDPerson() + "] 邮箱=[" + zbo.getDEmail()
+ "] 电话=[" + zbo.getDPhone() + "]\n");
}
writer.close();
} catch (JsonIOException e) {
e.printStackTrace();
} catch (JsonSyntaxException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出文件内容,
值班项=[A值班] 日期=[2017-09-02] 值班人=[梅西] 邮箱=[abc@abc.com] 电话=[10000000000]
值班项=[A值班] 日期=[2017-09-03] 值班人=[内马尔] 邮箱=[jkh@jkh.com] 电话=[10000000002]
值班项=[B值班] 日期=[2017-09-02] 值班人=[C罗] 邮箱=[xyz@xzy.com] 电话=[10000000001]
值班项=[B值班]日期=[2017-09-03] 值班人=[阿扎尔] 邮箱=[lox@lox.com] 电话=[10000000003]
按照值班项进行的排序,符合原始需求。
源代码可以从github上下载,
https://github.com/bisal-liu/java
如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)
json格式值班表解析相关推荐
- oracle解析json格式字段,sql解析json格式字段
java将json数据解析为sql语句? 图片中是json数据,每个数据的开头都有表名称,操作类型,后面是数据,import java.util.Iterator;import java.util.S ...
- php使用 js格式解析,php 无限级数据JSON格式及JS解析_PHP教程
Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~) 复制代码 代码如下: //–查询用户下线信息,返回JSON,用于flash if(!empt ...
- Android——网络交互,如何调用接口并且json解析json格式和pull解析xml格式
本菜鸟因为之前一直使用的是公司前辈封装好的类(网络接口调用超级方便有木有)完全没有想过有一天我会自己写,然后今天接触的时候一脸懵逼,然后今天花了一天时间终于研究好了:哈哈哈哈哈 二话不说先上代码: p ...
- mvc ---- ajax 提交过来的Json格式如何处理(解析)
前台传过来的不是一个对象,而是一个Json字符串怎么办 ? 如: {"fids":"2323","contents":"<p ...
- html 解析接口返回数据,请求第三方接口返回json格式数据的解析
HttpClient httpClient = new HttpClient(); httpClient.getHttpConnectionManager().getParams().setConne ...
- VS2003版本Json格式文件的解析
1.VS2003版本Jsoncpp环境配置 参考链接:https://blog.csdn.net/hao745580264_dawei/article/details/107475207 2.细节问题 ...
- hive 导出json格式 文件_hive中创建hive-json格式的表及查询
在hive中对于json的数据格式,可以使用get_json_object或json_tuple先解析然后查询. 也可以直接在hive中创建json格式的表结构,这样就可以直接查询,实战如下(hive ...
- 前端json格式的介绍,转换以及解析
近几日碰到json的问题比较多,我这里做一个总结,比较浅显简单,希望能对那些前端小白有所帮助,能对json有一个认识,并且能简单的处理json格式的内容. 例如最近碰到一个项目,项目需求如下: 用户选 ...
- SpringCloud工作笔记047---FastJson解析多级JSON_FastJson解析嵌套JSON_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
JAVA技术交流QQ群:170933152 解析嵌套json,这里说一下: //下面可以通过解析多级json的方式,获取数据,插入到数据库 //JSONObject userJsonObj = JSO ...
最新文章
- php中的全局变量$_REQUEST
- 从源码分析DEARGUI之键盘鼠标事件监控
- 皮一皮:中国好男友?
- (转)网络流-最大流 SAP算法(模板)
- 诈尸了。不瞒您说,老坑从不填,天天开新坑
- npm包管理器安装模块
- 计算机网络之应用层:5、万维网、http协议
- Docker 修改容器名称
- 苹果手机读取html文件,教你如何解决“iTunes不能读取iPhone内容”的问题
- codeforces:D1. Chopping Carrots (Easy Version)【最大最小值问题 + 控制一边让另一边尽量靠近 + 思维】
- 以中东地区军事数据为目标:移动网络间谍活动“Bouncing Golf”分析
- 2017艾普兰机智云全家福
- 大型建筑公司如何实现数字化转型
- 笔记34-JavaScript高级笔记
- Docker 容器操作 1
- PS学习记录6--html5 canvas+js实现ps钢笔抠图
- 游戏低延迟高续航真无线蓝牙耳机,小巧便捷出差旅行必备
- 区块链的安全软肋都有什么
- 使用Mob进行短信验证码发送
- 技术团队,是不是在祸害公司?
热门文章
- 我从阿里面试回来,想和Java程序猿谈一谈
- html里字号rem,html中的em和rem到底该如何使用,自适应效果中如何确定文字大小/字号?...
- java 网络实验_Java实验五网络编程与安全
- python语言包含的错误,Python语言程序中包含的错误,一般分为三种,以下____________不是其中的一种...
- datafactory生成mysql数据_测试数据生成工具DataFactory的使用
- 最温暖的大学,最火热的比赛
- 第十五届全国大学生智能车线上比赛流程规范总结
- 奇迹服务器维护,奇迹MU 3月31日服务器维护更新公告
- python macd背离_Python 精简多品种 MACD 趋势策略
- arcgis python脚本实现从界面选择输入输出_arcgis python脚本实现从界面选择输入输出_ArcGIS Python编程案例(2)-使用ArcPy编写脚本......