通常来说,java的功能很强大,足以解决大部分的问题,但是在涉及到json对象的解析和封装,个人觉得java功能还不如javascript。
由于javascript是一个弱语言,因此在javascript中可以很方便的解析、封装复杂的json数据,java在这个问题的解决上还真不如javascript好用。
但是有时候我们又不得不在java中解析和处理json格式的数据,怎么办呢?
目前来说有两种方法,一是通过导入json的jar包,直接在java代码中对json数据进行处理,另一种方法就是在java代码中直接调用js文件中的javascript函数。
第一种方法我在其他的文章中已经做了描述,下面主要讲一下如何通过调用js文件中的javascrip函数来达到处理json数据的目的。
首先,你需要有一个存放你要调用的javascript函数的js文件,将js函数写入此文件,并将此文件放入项目中。
例如我有一个名为a.js的文件,这个文件在项目中的路径为 webContent/components/a.js , 文件中有一个函数:
var getValue = function(temp){
return "传入的值为:"+temp;
};
注意,java程序调用的js函数中不得有alert()语句。
其次,在项目中的任意java文件中复制以下代码:
public static ServletContext getServletContext() {
return (ServletContext) FacesContext.getCurrentInstance()
.getExternalContext().getContext();
}
public void testOnJs(){
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
File file = new File(getServletContext.getRealPath("/components")+ "/a.js");
// 读取js文件
try {
FileReader reader = new FileReader(file);
// 执行指定脚本
engine.eval(reader);
if (engine instanceof Invocable) {
Invocable invoke = (Invocable) engine;
String sqlValue = (String) invoke.invokeFunction("getValue","测试");
System.out.println(sqlValue);
}
reader.close();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
执行这段java代码,就会在控制台上打印出 "测试" 俩字,说明成功读取js文件并调用javascript方法!