Java ScriptEngine 解析js

Java ScriptEngine 解析js

1、脚本引擎

 ① 通过脚本名称获取: 
      ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); 

 pasting

  1.  ScriptEngineManager manager = new ScriptEngineManager();    
  2.         ScriptEngine engine = manager.getEngineByName("JavaScript");

 

2、方法调用 

 

 

    Java虚拟机支持脚本的意义在于实现函数式的编程,即脚本中最重要的便是方法。一些脚本引擎允许使用者单独调用脚本中的某个方法,支持此操作的脚本引擎可以通过实现javax.script.Invocable接口,支持顶层方法或者某对象中成员方法的调用。使用方法调用时最好先检查脚本引擎是否实现了Invocable接口,JavaSE中的JavaScript引擎已实现了Invocable接口。 

 

① 在Java中调用脚本中的顶层方法 

[java]  view plain  copy
  1. public void invokeFunction() throws ScriptException, NoSuchMethodException {    
  2.     ScriptEngine engine = getJavaScriptEngine();    
  3.     String scriptText = "function greet(name) { println('Hello, ' + name); } ";    
  4.     engine.eval(scriptText);    
  5.     Invocable invocable = (Invocable) engine;    
  6.     invocable.invokeFunction("greet""Alex");    
  7. }    

 3、示例代码

 

 

 Reader scriptReader = null ;
        try {
            String configFileRootDir = System.getProperty("configFileRootDir") ;
            if(StringUtils.isNotBlank(configFileRootDir)){
                File jsFile = new File(configFileRootDir+File.separator+"collectscript"+File.separator+scriptFileName);
                LOGGER.debug("scriptReader jsFile.getAbsolutePath(): "+jsFile.getAbsolutePath());
                scriptReader = new InputStreamReader(new FileInputStream(jsFile)) ;
            }else{
                scriptReader = new InputStreamReader(JavaScriptJMXUtil.class.getClassLoader().getResourceAsStream("collectscript/" + scriptFileName));
            }
            ScriptEngineManager manager = new ScriptEngineManager() ;
            ScriptEngine engine = manager.getEngineByName("JavaScript");
            engine.eval(scriptReader) ;
            if(engine instanceof Invocable){
                Invocable invEngine = (Invocable)engine ;
                Map<String,Object> resultMap = (HashMap)invEngine.invokeFunction("collectEntranceFunction",kpiArray,jmx_hostname,jmx_port,jmx_username,jmx_pwd,mBeanUri);
                }
                return resultMap ;
            }

 

          被调用的 test.js 文件

var logger = org.slf4j.LoggerFactory.getLogger("jmx_activemq_kpitemp.js");
var util = new com.ai.toptea.jmx.monitor.javascript.platform.CassandraPlatformUtil();  //java 类实现公共方法

 

function collectEntranceFunction(kpiArray,jmx_hostname,jmx_port,jmx_username,jmx_pwd) {
    logger.info("execute jmx_activemq_kpitemp.js...");
    var msc = util.initMBeanServerConnAndReturn(jmx_hostname,jmx_port,jmx_username,jmx_pwd);
    var resultMap = new java.util.HashMap();
    for(var i=0 ; i<kpiArray.length ; i++ ){
        resultMap.put(kpiArray[i],this[kpiArray[i]](msc));
    }
    util.closeJMXConnector();//关闭JMXConnector连接
    logger.info("execute jmx_activemq_kpitemp.js completed.");
    return resultMap;
}

 

转载于:https://www.cnblogs.com/jing1617/p/7066463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在 Java解析 JSON 数据,可以使用 JSON 库,比如 Google 的 Gson 库或者阿里的 Fastjson 库等。以下是使用 Gson 库解析 JSON 数据的示例代码: ```java import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; public class JsonExample { public static void main(String[] args) { String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; Gson gson = new Gson(); JsonElement element = gson.fromJson(jsonString, JsonElement.class); JsonObject object = element.getAsJsonObject(); String name = object.get("name").getAsString(); int age = object.get("age").getAsInt(); String city = object.get("city").getAsString(); System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("City: " + city); } } ``` 在上面的示例代码中,我们首先将 JSON 字符串转换为 `JsonElement` 对象,然后再将其转换为 `JsonObject` 对象,最后通过 `get` 方法获取 JSON 中的字段值。 如果你想使用 `scriptEngine.eval` 方法解析 JSON 数据,可以使用 JavaScript 中的 `JSON.parse` 方法,在 Java 中调用 JavaScript 引擎来执行该方法,以下是示例代码: ```java import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JsonExample { public static void main(String[] args) throws ScriptException { String jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); String script = "JSON.parse('" + jsonString.replace("'", "\\'") + "')"; Object result = engine.eval(script); System.out.println(result); } } ``` 在上面的示例代码中,我们首先将 JSON 字符串中的单引号转义为 `\'`,然后将其传递给 JavaScript 引擎的 `JSON.parse` 方法执行,最终得到一个对象。需要注意的是,使用这种方式解析 JSON 数据需要引入 JavaScript 引擎相关的依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值