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的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

时间: 2024-10-12 00:20:28

json格式值班表解析的相关文章

举例详解HTML5中使用JSON格式提交表单

以JSON编码格式提交表单数据是HTML5对WEB发展进化的又一大贡献,以前我们的HTML表单数据是通过key-value方式传输的服务器端,这种形式的传输对数据组织缺乏管理,形式十分原始.而新出现的JSON格式提交表单数据方法,将表单里的所有数据转化的具有一定规范的JSON格式,然后传输的服务器端.服务器端接收到的数据是直接可以使用的合格JSON代码.如何声明以JSON格式提交表单 大家应该对如何用表单上传一个文件的写法很熟悉,它需要在HTML中form标记上添加 enctype="multi

json解析-请问这样的json格式该怎样解析?具体的实体类该怎么定义?每个item的属性个数不一样,这样该怎么定义属性?

问题描述 请问这样的json格式该怎样解析?具体的实体类该怎么定义?每个item的属性个数不一样,这样该怎么定义属性? {result"":""200""//String类型成功时返回200newsList"": [ {type"":1//type为1时是新闻,2是广告,3.图酷title"":""""//新闻标题img"":&

php 无限级数据JSON格式及JS解析_php实例

Flash需要JSON格式的数据,于是,就有了如下代码:(PHP实现,C#类似,JSON库自己去下吧~~) 复制代码 代码如下: //--查询用户下线信息,返回JSON,用于flash if(!empty($_GET['action'])&&!empty($_GET['invite'])){ //固定参数请求才会返回信息 if($_GET['action']=='getinfo'&&$_GET['invite']==1){ //数据实体,一个实体类 class UcInvi

JS 无限级 Select效果实现代码(json格式)_表单特效

演示地址: http://demo.jb51.net/js/2011/js_select/index.htm数据 复制代码 代码如下: var data=[ {id:1,name:"前端开发",pid:0}, {id:2,name:"CSS",pid:1}, {id:3,name:"JS",pid:1}, {id:4,name:"HTML",pid:1}, {id:5,name:"数据库",pid:0},

PHP JSON格式数据交互实例详解

此前我写了不少在PHP网站开发中应用XML进行数据交互的实例,这两天通过PHP解析JSON并进行交互的实例学习和了解了JSON在PHP中的应用,感觉非常方便,在PHP中解析JSON主要用到json_encode和json_decode两个PHP JSON函数,比PHP解析XML方便很多,下面详细介绍下PHP JSON的使用. JSON基础介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON主要有两种结构: "名称/值"对的集合,

深入分析JSON编码格式提交表单数据

  这篇文章主要介绍了深入分析JSON编码格式提交表单数据的相关资料,需要的朋友可以参考下 以JSON编码格式提交表单数据是HTML5对WEB发展进化的又一大贡献,以前我们的HTML表单数据是通过key-value方式传输的服务器端,这种形式的传输对数据组织缺乏管理,形式十分原始.而新出现的JSON格式提交表单数据方法,将表单里的所有数据转化的具有一定规范的JSON格式,然后传输的服务器端.服务器端接收到的数据是直接可以使用的合格JSON代码. 如何声明以JSON格式提交表单 大家应该对如何用表

PHP JSON格式数据交互实例代码详解_php技巧

在PHP中解析JSON主要用到json_encode和json_decode两个PHP JSON函数,比PHP解析XML方便很多,下面详细介绍下PHP JSON的使用.JSON基础介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. JSON主要有两种结构: "名称/值"对的集合,在PHP中可以理解为关联数组 (associative array). 值的有序列表(An ordered list of values).在PHP中可以理解为

Jquery 组合form元素为json格式,asp.net反序列化_jquery

作者:敖士伟 Email:ikmb@163.com 转载注明作者 说明: 1.js根据表单元素class属性,把表单元素的name和value组合为json格式;用表单元素class属性可以针对性地组合JSON数据. 2.后端ASP.NET用JavaScriptSerializer反序列化为对象实列. 3.好处:简化了前端数据读取与后端数据赋值. 复制代码 代码如下: function GetJSONStr(class_name) { var a = []; //文本框 $("." +

深入分析JSON编码格式提交表单数据_json

以JSON编码格式提交表单数据是HTML5对WEB发展进化的又一大贡献,以前我们的HTML表单数据是通过key-value方式传输的服务器端,这种形式的传输对数据组织缺乏管理,形式十分原始.而新出现的JSON格式提交表单数据方法,将表单里的所有数据转化的具有一定规范的JSON格式,然后传输的服务器端.服务器端接收到的数据是直接可以使用的合格JSON代码. 如何声明以JSON格式提交表单 大家应该对如何用表单上传一个文件的写法很熟悉,它需要在HTML中form标记上添加 enctype="mult