【JSON】页面解析详细介绍

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

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.
 */
//todo
public 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();
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶洲川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值