java 利用ScriptEngine解析脚本

1.表达式

ScriptEngine engine=new ScriptEngineManager().getEngineByName("JavaScript");
System.out.println("1+2 "+engine.eval("1+2"));
System.out.println("!true||false "+engine.eval("!true||false "));
System.out.println("1>2?true:false "+engine.eval("1>2?true:false"));
1+2 3
!true||false false
1>2?true:false false

2.函数

ScriptEngine engine=new ScriptEngineManager().getEngineByName("JavaScript");
String script = "function add(a,b) { print(a+b); }";
engine.eval(script);
Invocable inv = (Invocable) engine;
inv.invokeFunction("add", 2 ,1);

3.实现接口

package com.knife.test;

public interface B {

	public void test();
	
}
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("var obj={test:function(){print('i a test function')}}");
		
Invocable inv = (Invocable) engine;

B b = inv.getInterface(engine.get("obj"),B.class);
        
b.test();
i a test function

4.从文本中加载

test.js


    var DATA        = '9eyJjb21pYyI6eyJpZCI6NjI5NjQ1LCJ0aXRsZSI6Ilx1OGQ0Y1x1NTM1YVx1OWVkOFx1NzkzYVx1NWY1NVx1ZmYwOFx1MzAwYVx1NTJhOFx1NzI2OVx1NGUxNlx1NzU0Y1x1MzAwYlx1NTM5Zlx1NGY1Y1x1ZmYwOSIsImNvbGxlY3QiOiI1MzAzIiwiaXNKYXBhbkNvbWljIjp0cnVlLCJpc0xpZ2h0Tm92ZWwiOmZhbHNlLCJpc0xpZ2h0Q29taWMiOmZhbHNlLCJpc0ZpbmlzaCI6ZmFsc2UsImlzUm9hc3RhYmxlIjp0cnVlLCJlSWQiOiJLbEJQUzBOUFUxSlVBUU1mQWdjUEFRd01IRWRkTkE9PSJ9LCJjaGFwdGVyIjp7ImNpZCI6NzIsImNUaXRsZSI6IjYxIiwiY1NlcSI6IjYzIiwidmlwU3RhdHVzIjoyLCJwcmV2Q2lkIjo3MSwibmV4dENpZCI6NzMsImJsYW5rRmlyc3QiOjEsImNhblJlYWQiOmZhbHNlfSwicGljdHVyZSI6W3sicGlkIjoiMTE5MjAiLCJ3aWR0aCI6ODAwLCJoZWlnaHQiOjEyMDAsInVybCI6Imh0dHBzOlwvXC9tYW5odWEucXBpYy5jblwvbWFuaHVhX2RldGFpbFwvMFwvMDJfMTFfMzlfMmM2ODY5YTBlMGIxNmE3YmNmYmY0YzNiZDA2MGNmZTlfMTE5MjAuanBnXC8wIn1dLCJhZHMiOnsidG9wIjoiIiwibGVmdCI6W10sImJvdHRvbSI6eyJ0aXRsZSI6Ilx1NGUwN1x1NGU4Ylx1NGUwN1x1NzA3NSIsInBpYyI6Imh0dHBzOlwvXC9tYW5odWEucXBpYy5jblwvb3BlcmF0aW9uXC8wXC8wNV8xMV80NF9jOWFkZmVkZDEyMTE2NzM1MDIxYTIyYmNhNjZhZWQ0MV8xNTMwNzYyMjY2NjE3LmpwZ1wvMCIsInVybCI6Imh0dHA6XC9cL2FjLnFxLmNvbVwvQ29taWNcL2NvbWljSW5mb1wvaWRcLzYzMTM5OSIsIndpZHRoIjoiNjUwIiwiaGVpZ2h0IjoiMTEwIn19LCJhcnRpc3QiOnsiYXZhdGFyIjoiaHR0cDpcL1wvdGhpcmRxcS5xbG9nby5jblwvZz9iPXNkayZrPWpNRWliamZsSmw3NjFZZG9uZFUya1NRJnM9NjQwJnQ9MTQ5Mzc5MjgzMyIsIm5pY2siOiJcdTUzY2JcdTRlYmFBXHU1NDFiIiwidWluQ3J5cHQiOiJSalpYWVVsSVZIZEpXRWhoUjJoSVVETTVSbVZ5ZHowOSJ9fQ==',
        PRELOAD_NUM = 2,
        NOTICE_TIME = 15,
        ROAST_SIZE  = 300,
        ROAST_PRE   = 5,
        ROAST_VIEW  = 11,
        DANMU_TIME  = 10000;
    eval(function(p, a, c, k, e, r) {
		e = function(c) {
			return (c < a ? "" : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))
		};
		if (!"".replace(/^/, String)) {
			while (c--) r[e(c)] = k[c] || e(c);
			k = [function(e) {
				return r[e]
			}];
			e = function() {
				return "\\w+"
			};
			c = 1
		}
		while (c--) if (k[c]) p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c]);
		return p
	}('p s(){i="C+/=";H.q=p(c){o a="",b,d,h,f,g,e=0;z(c=c.J(/[^A-L-M-9\\+\\/\\=]/g,"");e<c.r;)b=i.l(c.k(e++)),d=i.l(c.k(e++)),f=i.l(c.k(e++)),g=i.l(c.k(e++)),b=b<<2|d>>4,d=(d&t)<<4|f>>2,h=(f&3)<<6|g,a+=5.7(b),w!=f&&(a+=5.7(d)),w!=g&&(a+=5.7(h));n a=y(a)};y=p(c){z(o a="",b=0,d=D=8=0;b<c.r;)d=c.j(b),E>d?(a+=5.7(d),b++):F<d&&G>d?(8=c.j(b+1),a+=5.7((d&I)<<6|8&m),b+=2):(8=c.j(b+1),x=c.j(b+2),a+=5.7((d&t)<<K|(8&m)<<6|x&m),b+=3);n a}}o B=v s;u=(v N("n "+B.q(u.O(1))))();', 51, 51, "|||||String||fromCharCode|c2||||||||||_keyStr|charCodeAt|charAt|indexOf|63|return|var|function|decode|length|Base|15|DATA|new|64|c3|_utf8_decode|for|||ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|c1|128|191|224|this|31|replace|12|Za|z0|Function|substring".split("|"), 0, {}))

	for(var o in DATA){
		for(var o1 in DATA[o]){
			print(o+" "+o1+":"+DATA[o][o1]);
		}
	}
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval(new java.io.FileReader("test.js"));

结果: 

comic id:629645
comic title:赌博默示录(《动物世界》原作)
comic collect:5303
comic isJapanComic:true
comic isLightNovel:false
comic isLightComic:false
comic isFinish:false
comic isRoastable:true
comic eId:KlBPS0NPU1JUAQMfAgcPAQwMHEddNA==
chapter cid:72
chapter cTitle:61
chapter cSeq:63
chapter vipStatus:2
chapter prevCid:71
chapter nextCid:73
chapter blankFirst:1
chapter canRead:false
picture 0:[object Object]
ads top:
ads left:
ads bottom:[object Object]
artist avatar:http://thirdqq.qlogo.cn/g?b=sdk&k=jMEibjflJl761YdondU2kSQ&s=640&t=1493792833
artist nick:友人A君
artist uinCrypt:RjZXYUlIVHdJWEhhR2hIUDM5RmVydz09

猜你喜欢

转载自blog.csdn.net/caideb/article/details/81224749