您的位置:首页 > 编程语言 > Java开发

java解析js数组数据

2011-11-26 16:12 99 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: