java解析js数组数据

 

js代码如下:
var at_arrEle11 = new Array;at_arrEle11[0] = new Array("4","舞街区")at_arrEle11[1] = new Array("1","航海世纪")at_arrEle11[2] = new Array("9","英雄之城")at_arrEle11[3] = new Array("7","天子")at_arrEle11[4] = new Array("13","机甲世纪革新版")at_arrEle11[5] = new Array("3","机甲世纪")at_arrEle11[6] = new Array("12","帝国文明")at_arrEle11[7] = new Array("8","龙战")var at_arrEle4 = new Array;var at_arrEle5 = new Array;at_arrEle5[0] = new Array("0","中心帐户")at_arrEle5[1] = new Array("1","分区帐户") var allow_sub = true;var flag = false;var at_par = 0;var at_opar;var at_oele1;var at_oele1c;var at_oele6;var at_oele6t;var at_onum; //var at_oele3t;var at_oele4;var at_oele4t;var at_oele11;var at_oele11t;var at_oele12;var at_oele13;var at_oele5;var at_oele5t;function at_fi(par){ at_oele1 = document.getElementById("at_ele1");at_oele1c = document.getElementById("at_ele1c");at_oele6 = document.getElementById("at_ele6");at_oele6t = document.getElementById("at_ele6t");at_oele5 = document.getElementById("at_ele5");at_oele5t = document.getElementById("at_ele5t");at_oele4 = document.getElementById("at_ele4");at_oele4t = document.getElementById("at_ele4t"); at_oele11 = document.getElementById("at_ele11");at_oele11t = document.getElementById("at_ele11t"); at_oele12 = document.getElementById("at_ele12");at_oele13 = document.getElementById("at_ele13");at_onum = document.getElementById("at_num");at_opar = document.getElementById("at_par");at_onum.value = "";at_opar.value = "";  at_par = parseInt(par);if((at_par!=10)&&(at_par!=15)&&(at_par!=30)&&(at_par!=60)&&(at_par!=100) || isNaN(at_par)){allow_sub = false;alert("充值表单初始化失败!");}else {at_opar.value = at_par;at_onum.value = 1;at_iele11();at_iele5();at_oele4.disabled = false;at_oele12.innerHTML = '<font color="red">'+at_par+'元</font>';}}function at_fs(){if(allow_sub == false){alert("充值金额不正确!");return false;}if(at_oele11.value==""){at_oele11.focus();alert("请选择充值游戏!");return false;}at_oele1.value = at_oele1.value.replace(/\s/g,"");at_oele1c.value = at_oele1c.value.replace(/\s/g,"");if(at_oele1.value==""){at_oele1.focus();alert("请输入帐号");return false;}if(at_oele1c.value != at_oele1.value){at_oele1c.value = "";at_oele1c.focus();alert("两次帐号输入不一致");return false;}if((at_oele5.length!=true) && (at_oele5.value=="")){at_oele5.focus();alert("请选择充值类型!");return false;} if( (at_oele4.disabled!=true) && (at_oele4.value=="") && (at_oele4.length!=1)){at_oele4.focus();alert("请选择充值服务器!");return false;}if(at_oele4.disabled == true){at_oele4t.value = "";}var additon = "帐号:"+at_oele1.value+";";additon += "充值游戏:"+at_oele11t.value+";";additon += "充值类型:"+at_oele5t.value+";"; if(at_oele4t.value!=""){additon += "充值游戏分区:"+at_oele4t.value+";";}additon += "充值金额:"+at_opar.value+"元";document.getElementById("at_addition").value = additon;return true;}function check_at_ele1(){if(at_oele11.value==""){at_oele11.focus();alert("请选择充值游戏!");return false;}if(at_oele1.value == ""){at_oele1.value = "";at_oele1.focus();alert("请填写充值帐号!");return false;}if(at_oele1c.value != at_oele1.value){at_oele1c.value = "";at_oele1c.focus();alert("充值帐号与确认充值帐号不一致!");return false;}at_oele13.innerHTML = "";var xmlHttpReq = false;if(window.XMLHttpRequest){xmlHttpReq = new XMLHttpRequest();if(xmlHttpReq.overrideMimeType){xmlHttpReq.overrideMimeType('text/xml');}}else if(window.ActiveXObject){var XmlHttpVersions = ['Microsoft.XMLHTTP', 'MSXML6.XMLHTTP', 'MSXML5.XMLHTTP','MSXML4.XMLHTTP', 'MSXML3.XMLHTTP', 'MSXML2.XMLHTTP', 'MSXML.XMLHTTP'];for (var i=0; i < XmlHttpVersions.length; i++){try{xmlHttpReq = new ActiveXObject(XmlHttpVersions[i]);break;}catch (ex){continue;}}}if(!xmlHttpReq){alert("AJAX初始化失败!");return false;}xmlHttpReq.open("GET", "/auto_proxy.php?p1=10022004&p2="+at_oele1.value+"&p3="+at_oele11.value+"&p4="+at_opar.value, false);xmlHttpReq.send(null);var strMsg = "";switch(xmlHttpReq.responseText){case "0": strMsg = "该游戏不支持"+at_opar.value+"元的充值,请选择其他面值继续充值"; break;case "1": strMsg = "请填写游戏,充值帐号等信息"; break;case "2": strMsg = "网路异常,无法验证游戏帐号信息,无法继续充值"; break;case "3": strMsg = "官方未返回帐号验证信息,无法继续充值"; break;case "4": strMsg = "充值帐号验证失败,无法继续充值"; break;case "1004": strMsg = "代理商的身份没有足够权限访问,无法继续充值"; break;case "52005": strMsg = "通行证帐号查询异常,无法继续充值"; break;}if (strMsg != ""){at_oele13.innerHTML = '<font color="red">'+strMsg+'</font>';alert(strMsg);allow_sub = false;}else {allow_sub = true;var obj_json = eval('(' + xmlHttpReq.responseText + ')');if(at_oele5.value!=0){at_oele4.disabled = false;}at_oele4.length = 0;at_oele4.options.add(new Option("请选择...",""));for (var i=0; i<obj_json.area_id.length; i++){var opt = document.createElement('OPTION');opt.value = obj_json.area_id[i];opt.text = unescape(obj_json.area_name[i]);at_oele4.options.add(opt);}var str_prop="";for (var i=0; i<obj_json.prop_name.length; i++){at_oele4.disabled = false;flag = true;str_prop += unescape(obj_json.prop_name[i])+" 数量 "+ obj_json.prop_amount[i]+"<br>";}if (str_prop == ""){flag = false;str_prop = "无道具";}at_oele13.innerHTML = str_prop;}}function at_ele1c_blur(obj){check_at_ele1();}function at_iele11(){at_oele11.length = 0;at_oele11.options.add(new Option("请选择...",""));for(var i=0; i < at_arrEle11.length; i++){var opt = document.createElement('OPTION');opt.value = at_arrEle11[i][0];opt.text = at_arrEle11[i][1];at_oele11.options.add(opt); }}function at_ele11_change(obj){at_oele4.disabled = true;if(at_oele11.value==1){at_oele5.length = 0;at_oele5.options.add(new Option("请选择...",""));at_oele5.options.add(new Option("中心帐户","0"));}else if(at_oele11.value==9 || at_oele11.value==12){at_oele5.length = 0;at_oele5.options.add(new Option("请选择...",""));at_oele5.options.add(new Option("分区帐户","1"));}else{at_iele5();}if ((at_oele1.value!="") && (obj.value!="")){check_at_ele1();}at_oele11t.value=obj.options[obj.selectedIndex].text;}function at_iele5(){at_oele5.length = 0;at_oele5.options.add(new Option("请选择...",""));for(var i=0; i < at_arrEle5.length; i++){var opt = document.createElement('OPTION');opt.value = at_arrEle5[i][0];opt.text = at_arrEle5[i][1];at_oele5.options.add(opt); }}function at_ele5_change(obj){at_oele5t.value=obj.options[obj.selectedIndex].text;if(at_oele5.value==0 && flag==false){at_oele4.disabled = true;}else{at_oele4.disabled = false;}}function at_ele4_change(obj){at_oele4t.value=obj.options[obj.selectedIndex].text;}function isIE(){if(window.navigator.userAgent.toLowerCase().indexOf("msie")>=1){return true; }else{ return false;} } if(!isIE()){HTMLElement.prototype.__defineGetter__("innerText", function(){var anyString = "";var childS = this.childNodes;for(var i=0; i<childS.length; i++) {if(childS[i].nodeType==1){anyString += childS[i].innerText;}else if(childS[i].nodeType==3){anyString += childS[i].nodeValue;} }return anyString;} ); HTMLElement.prototype.__defineSetter__("innerText", function(sText){this.textContent=sText; } ); }


/**
  * 解析js代码专用方法,适用于解析js中的Array数组数据
  * @param jsStr
  * @author G007N
  * @return
  */
 public String getJsValue (String jsStr) {
  String output = "";   //解析后的字符串
  String str1 = "";     //把js中的"号替换成'号后的字符串
  String str2 = "";     //把js中的new Array('替换成空字符串后的字符串
  String str3 = "";     //把js中的')号替换成空字符串后的字符串
  String str4 = "";     //把js中的','号替换成:号后的字符串
  String str5 = "";     //把js中的 = 号替换成=号后的字符串
  String str6 = "";     //把js中的[0]=替换成=%后的字符串
  String str7 = "";     //把js中的;号替换成空字符后的字符串
  String str8 = "";     //按照at_的规律截取并加上;号后的字符串
  String str9 = "";     //从%开始截取后的字符串
  String str10 = "";    //把js中的var ;new Array;替换成空字符串后的字符串
  String str11 = "";    //把js中的var ;new Array替换成空字符串后的字符串
  String str12 = "";    //把js中的var ;new Array();替换成空字符串后的字符串
  String str13 = "";    //把js中的()号替换成空字符串后的字符串
  String str14 = "";    //把js中的;%号替换成%号后的字符串
  String str15 = "";    //把js中的 ;号替换成;号后的字符串
  String str16 = "";    //把js中的//号替换成空字符串后的字符串
  String str17 = "";    //把js中的 var替换成var后的字符串
  String str18 = "";    //把js中的', '号替换成:号后的字符串
  String str19 = "";    //把js中的' , '号替换成:号后的字符串
  String str20 = "";    //按照=号的规律截取并加上;号后的字符串
  String str21 = "";    //把数组名称、下标及数组键值一一匹配后的字符串
  String str22 = "";    //按照];号的规律截取并加上]%号后的字符串
  String str23 = "";    //数组键值字符串
  String str24 = "";    //去掉非数组的js代码字符串
  String str25 = "";    //标准的键值数据字符串
  String str26 = "";    //标准的数组名称、下标、键值字符串
  String info1[] = null;//按照at_字符规律截断的字符串
  String info2[] = null;//按照=号规律截断的字符串
  String info3[] = null;//按照];号规律截断的字符串
  String info4[] = null;//按照]%号规律截断的字符串
  String info5[] = null;//按照];号规律截断的字符串
  ArrayList<String> varIndexList = null;//数组变量名称及数组下标list
  ArrayList<String> keyValueList = null;//数组键值list
  
  //把js字符串中的""双引号替换成'单引号
  str1 = jsStr.replaceAll("\"","'");
  //判断js代码中是否有数组
  if (str1.indexOf("new Array('") == -1) {
   output = "无数组";
  } else {
   //开始替换字符串中的各种字符
   str2 = str1.replace("new Array('", "");
   str3 = str2.replace("')", "");
   str4 = str3.replace("','", ":");
   str5 = str4.replace(" = ", "=");
   str6 = str5.replace("[0]=", "=%");
   str7 = str6.replace(";", "");
   
   /*
    * 把替换后的字符串按照at_字符规律进行分段截取,然后再从=号开始截取我们需要的数据,取完一个就在后面加;号进行分隔
    * 因为js中还有其它我们不需要的非数组数据代码,所以在截取时会报异常,我们采用try,catch非常手段来把异常去掉
    * 以下类似代码都是如此解释,下面类似代码省略注释,不做说明
    */
   try {
    for (int i = 0; i < str7.length(); i++) {
     info1 = str7.split("at_");
     str8 += info1[i].substring(info1[i].indexOf("=")+1)+";";
    }
   } catch (Exception e1) {
   }
   
   try {
    for (int i = 0; i < str5.length(); i++) {
     info2 = str5.split("=");
     str20 += info2[i].substring(info2[i].indexOf("at_"))+";";
    }
   } catch (Exception e2) {
   }
   
   try {
    for (int i = 0; i < str20.length(); i++) {
     info3 = str20.split("];");
     str22 += info3[i].substring(info3[i].indexOf(";")+1)+"]%";
    }
   } catch (Exception e3) {
   }
   
   //经过上面的几次截取后,我们的数据基本是出来了,为了不同数组变量间好区分,我们用%号进行不同数组变量间的分隔
   str23 = str22.replace(";", "%");
   
   //接下来我们继续按照老办法进行有规律的截取
   try {
    varIndexList = new ArrayList<String>();
    //我们把下面标准的数组变量及数组下标一起装到varIndexList中去,方便和后面的数组值进行一 一匹配
    for (int i = 0; i < str23.length(); i++) {
     info4 = str23.split("%");
     if (info4[i].indexOf("[") != -1) {
      varIndexList.add(info4[i]);
     }
    }
   } catch (Exception e4) {
   }
   
   //由于许多js中大家写的习惯不一致,存在一些各种格式,所以我们把这些可能出现的字符都统统替换成标准格式
   str9 = str8.substring(str8.indexOf("%")+1,str8.length());
   str10 = str9.replace("var ;new Array;", "");
   str11 = str10.replace("var ;new Array", "");
   str12 = str11.replace("var ;new Array();", "");
   str13 = str12.replace("()", "");
   str14 = str13.replace(";%", "%");
   str15 = str14.replace(" ;", ";");
   str16 = str15.replace("//", "");
   str17 = str16.replace(" var", "var");
   str18 = str17.replace("', '", ":");
   str19 = str18.replace("' , '", ":");
   
   //到这里js数组解析已经结束,我们把后面的那些非数组的js代码扔掉不要
   if (str19.indexOf("var") != -1) {
    str24 = str19.substring(0,str19.indexOf("var"))+";";
   }
   
   //现在str24打印出来结果为:str24===4:舞街区;1:航海世纪;9:英雄之城;7:天子;13:机甲世纪革新版;3:机甲世纪;12:帝国文明;8:龙战%0:中心帐户;1:分区帐户;
   //System.out.println("str24==="+str24);
   //通过上面的打印我们看出,%号前面的数据没有按标准的;号进行分隔,我们替换一下,把它变标准
   str25 = str24.replace("%", ";%");
   
   //我们把这个标准的数组键值装到keyValueList中去,方便和前面varIndexList中的数组变量名进行一 一匹配
   keyValueList = new ArrayList<String>();
   try {
    for (int i = 0; i < str25.length(); i++) {
     info5 = str25.split(";");
     keyValueList.add(info5[i]);
    }
   } catch (Exception e5) {
   }
   
   /*
    * 现在我们开始进行数组变量名称及下标与数组值的一 一匹配
    * 我们查找以%分隔的不同数组变量,查到后就同样在不同的数组变量名前面加上%来进行不同变量间的分隔
    */
   for (int i = 0; i < varIndexList.size(); i++) {
    if (keyValueList.get(i).indexOf("%") != -1) {
     str21 += "%"+varIndexList.get(i)+":"+keyValueList.get(i)+";";
    } else {
     str21 += varIndexList.get(i)+":"+keyValueList.get(i)+";";
    }
   }
   
   /*
    * 现在我们打印str21的结果为:str21===at_arrEle11[0]:4:舞街区;at_arrEle11[1]:1:航海世纪;at_arrEle11[2]:9:英雄之城;at_arrEle11[3]:7:天子;at_arrEle11[4]:13:机甲世纪革新版;at_arrEle11[5]:3:机甲世纪;at_arrEle11[6]:12:帝国文明;at_arrEle11[7]:8:龙战;%at_arrEle5[0]:%0:中心帐户;at_arrEle5[1]:1:分区帐户;
    * 可以看出 %at_arrEle5[0]:%0:中心帐户 这个地方分隔的还不够标准,我们再次替换一下就是标准的可用数据了
    */
   //System.out.println("str21==="+str21);
   str26 = str21.replace(":%", ":");
   //我这里由于客户需要的数据是变量名称为at_ele格式,所以替换一下,大家自行处理
   output = str26.replace("arrEle", "ele");
  }
  
  /*
   * 费了九牛二虎之力,最后我们来看一下我们的打印结果,如下
   * at_ele11[0]:4:舞街区;at_ele11[1]:1:航海世纪;at_ele11[2]:9:英雄之城;at_ele11[3]:7:天子;at_ele11[4]:13:机甲世纪革新版;at_ele11[5]:3:机甲世纪;at_ele11[6]:12:帝国文明;at_ele11[7]:8:龙战;%at_ele5[0]:0:中心帐户;at_ele5[1]:1:分区帐户;
   */
  //System.out.println("output==="+output);
  return output;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值