【JSON】页面解析详细介绍

来源:互联网 发布:ubuntu 安装terminal 编辑:程序博客网 时间:2024/05/21 17:17

解析一个页面,是一个程序员的基本功,下面这个例子将介绍解析一个页面的具体方法;这个例子是一个比较特殊的例子,这里的页面不是一个标准的页面,而是一个在浏览器打开的内部的小系统,具体的含义都下载代码的注释中,代码如下:

package test;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.fxrj.security.model.NoticeList;import com.fxrj.security.model.PageInfo;import com.platform.common.constants.OtherSystemBingdingUrl;import com.platform.common.util.Base64EncodeAndDecode;import com.platform.common.util.EncoderByMd5;import com.platform.http.RequestContext;import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import java.util.ArrayList;import java.util.List;import java.util.Map;/** * Created by Administrator on 2017/8/21 0021. *///todopublic class TestNoticeList {    public static void main(String[] args) {        RequestContext requestContext = new RequestContext();        try{            //模拟登录            String name="111";            String password="222";            //Base64加密            String nameBase64= Base64EncodeAndDecode.encode(name);            //MD5处理加密唯一编码            String passwdMD5 = EncoderByMd5.encodeByMd5(password).toUpperCase();            String params =basicUrl+"\"&_m=loginByEncode&_p0=\""+nameBase64+"\"&_p1=\""+passwdMD5+"\"";            //链接            Connection.Response response = Jsoup.connect(OtherSystemBingdingUrl.SECURITY_LOGIN)                    .header("Content-Type","application/x-www-form-urlendoced")                    .header("X-Request-With","XMLHttpRequest")                    .requestBody(params)                    .method(Connection.Method.POST)                    .execute();            //获取原网页的cookies            Map<String,String> cookies= response.cookies();            requestContext.cookies(cookies);            //需要访问的具体页面地址            String url=basicUrl2+"?&p=1EAB1808-1343-4D98-8381-C8B6586C2CD8";            //requstContext中的resquestBody中放入的参数;            String resBody=basicUrl3+"&_m=getListData&_p0=\"\"&_p1=\"1EAB1808-1343-4D98-8381-C8B6586C2CD8\"&_p2=5&_p3=\"F2DA902D-B732-41D3-8DD3-B4232C4CB128\"&_p4=\"BT ASC,SHOWORDER ASC,SHEETID ASC\"&_p5=null&_p6=1&_p7=15";            //用Jsoup解析原网址(及各个参数)            Document doc = Jsoup.connect(url)                    .header("Content-Type","application/x-www-form-urlencoded")                    .header("X-Requested-With","XMLHttpRequest")                    .cookies(requestContext.cookies())                    .requestBody(resBody)                    .post();            //JSON解析            String jsonString = doc.body().html();            //用正则表达式来解析获取的jsonString(方法已封装)            List<String> noticeListstr = OtherSystemBingdingUrl.extractMessageByRegular(jsonString);            //创建一个List容器来装列表中解析出来的一个个对象;            List<NoticeList> noticeLists = new ArrayList<>();            for (String s:noticeListstr) {                //创建一个空对象,来装从列表中解析出来的一个个对象;仅仅当做瓢用,做舀水动作,运输作用,没有实际存储的作用;放在for循环里面,每次清空                NoticeList nl = new NoticeList();                //JSON将String类型的,具有Json格式的s,解析(parse)出来的对象是Object类型的,需要强制转换成JSONObject格式;                JSONObject jsonObject = (JSONObject) JSON.parse(s);                System.out.println(jsonObject);                //这里jsonObject可以通过get()方法,使用键来获取josn内的值;然后一个一个set给我们的实体类nl(瓢)                nl.setSHEETSTATUSNAME((String)jsonObject.get("SHEETSTATUSNAME"));                nl.setCREATEDEPT((String) jsonObject.get("FXR"));                nl.setEDITUSERID((String) jsonObject.get("EDITUSERID"));                nl.setLASTOPENTIME((String) jsonObject.get("LASTOPENTIME"));                nl.setCREATEORG((String) jsonObject.get("CREATEORG"));                nl.setDATASTATUSID((String) jsonObject.get("DATASTATUSID"));                nl.setCREATEDEPTID((String) jsonObject.get("CREATEDEPTID"));                nl.setBT((String) jsonObject.get("BT"));                nl.setDATASTATUSID((String) jsonObject.get("DATASTATUSID"));                nl.setCREATEUSER((String) jsonObject.get("CREATEUSER"));                nl.setFLOWID((String) jsonObject.get("FLOWID"));                nl.setBZ((String) jsonObject.get("BZ"));                nl.setSHEETID((String) jsonObject.get("SHEETID"));                nl.setFLOWNODEID((String) jsonObject.get("FLOWNODEID"));                nl.setFLOWOBJECTID((String) jsonObject.get("FLOWOBJECTID"));                nl.setEDITUSER((String) jsonObject.get("EDITUSER"));                nl.setROW_INDEX((String) jsonObject.get("ROW_INDEX"));                nl.setBM((String) jsonObject.get("BM"));                nl.setOPENERID((String) jsonObject.get("OPENERID"));                nl.setFLOWNODENAME((String) jsonObject.get("FLOWNODENAME"));                nl.setWJ((String) jsonObject.get("WJ"));                nl.setSHEETNAME((String) jsonObject.get("SHEETNAME"));                nl.setSHOWORDER((String) jsonObject.get("SHOWORDER"));                nl.setCREATEDEPTID((String) jsonObject.get("CREATEDEPTID"));                nl.setWJID((String) jsonObject.get("WJID"));                nl.setOPENER((String) jsonObject.get("OPENER"));                nl.setCREATEUSERID((String) jsonObject.get("CREATEUSERID"));                nl.setDATATYPE((String) jsonObject.get("DATATYPE"));                nl.setTXR((String) jsonObject.get("TXR"));                nl.setCREATEDATE((String) jsonObject.get("CREATEDATE"));                nl.setTXSJ((String) jsonObject.get("TXSJ"));                nl.setFLOWID((String) jsonObject.get("FLOWID"));                nl.setCREATEORGID((String) jsonObject.get("CREATEORGID"));                nl.setSHEETSTATUSID((String) jsonObject.get("SHEETSTATUSID"));                nl.setFILEURL(basicJsp+"?fileid="+nl.getWJID());                //当nl的所有局部变量都设置好了以后,一个完整的,有值的nl对象就装载完毕了,然后我们给放到List(容器)中;                //这里就像用集装箱装东西,对象就是集装箱,我们把货物(各个局部变量,就是上面不断get,set的每一行)放到集装箱nl中,等集装箱装满了                //我们再把集装箱放到货轮上,货轮上有好多集装箱,唯一的区别是,集装箱是不重复使用,而这里的nl是像瓢一样,重复使用;                noticeLists.add(nl);//装载上船                }                //解析包含页面信息的Json;            List<String> PageLists =  OtherSystemBingdingUrl.extractMessageByRegular2(jsonString);            //List<PageInfo> pageInfoList= new ArrayList<>();            PageInfo pl = new PageInfo();            for(String s1 :PageLists){                JSONObject jsonObject2 = (JSONObject) JSON.parse(s1);                pl.setTableId((String) jsonObject2.get("tableId"));                pl.setTableName((String) jsonObject2.get("tableName"));                pl.setDataSourceName((String) jsonObject2.get("dataSourceName"));                pl.setDataUserName((String) jsonObject2.get("dataUserName"));                pl.setPageIndex((Integer) jsonObject2.get("pageIndex"));                pl.setRowsCount((Integer) jsonObject2.get("rowsCount"));                pl.setPageCount((Integer) jsonObject2.get("pageCount"));                pl.setCurrentRowCount((Integer) jsonObject2.get("currentRowCount"));            }        }catch (Exception e){            e.printStackTrace();        }    }}
原创粉丝点击