【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(); } }}
阅读全文
1 0
- 【JSON】页面解析详细介绍
- HTML页面加载和解析流程详细介绍
- HTML页面加载和解析流程详细介绍
- HTML页面加载和解析流程详细介绍
- HTML 页面加载和解析流程详细介绍
- HTML页面加载和解析流程详细介绍
- HTML页面加载和解析流程详细介绍
- android 详细json解析
- android json详细解析
- IOS JSON详细解析
- JSON解析-详细
- Json 详细解读 解析
- Json解析详细教程
- json解析[详细]
- 页面解析json总结
- 页面js解析json
- JSON【介绍、语法、解析JSON】
- XML解析详细介绍
- 表单标签
- 简谈对CPU的亲和度(cpu_affinity)
- hdu 6141 I am your Father!(最小树形图+权值编码)
- Eclipse怎么搭建Spring环境
- 【数据结构和算法】Day 1
- 【JSON】页面解析详细介绍
- 洛谷p1092合唱队形
- Android N的Audio系统(二)
- RabbitMQ消息队列+spring监听mq服务器多个ip,接收消费mq消息(二)
- 51nod1347 旋转字符串
- (四)初探反应器(event_base)
- 记一次Http问题排查
- jsp与数据库
- [caffe笔记007]:在新版caffe中实现Holistically-Nested Edge Detection