前段时间,需要从一个json的字符串中,拿出某个指定的元素。不知道用什么方式比较好,如果是XML格式大可使用诸如XPATH的方式进行指定查询,可这个是json格式,而且又在java后台,如果是前台我可以用javascript来描述这个json对象,javascript就可以用. . .的方式将元素的层次描述出来并且获得里面的值。可是在java代码中怎么能使用这一特性呢?
JDK 1.6提供了这样的一个新特性,script engine.
提供一个很好学习网址:里面有JAVA方面的N多例子:
[url]http://www.java2s.com/CN/Code/Java/JDK-6/VariablesboundthroughScriptEngine.htm[/url]
代码中的[b]WebserviceContentFetcher.fetchWebServicesContent(webServiceURL);[/b]是我自己写的一个访问webservice数据的类,就是这个webservice给我返回的一串json格式的字符串。然而我需要里面指定的某个元素。于是我使用javaScriptEngine(当然还有很多其他的脚本引擎),构造出一个在js中使用的json对象,通过js来获得指定的元素。
注意: 这个js引擎是本事就带返回值的,但是其中temp中要求是不能有返回值的,也不存在什么定义变量的说法。也就是说不能写成 var json .... return json..类似的语句。其他的我自己还要继续研究。不过这个新特性还是给我提供了很方便的处理json的新方式。
JDK 1.6提供了这样的一个新特性,script engine.
提供一个很好学习网址:里面有JAVA方面的N多例子:
[url]http://www.java2s.com/CN/Code/Java/JDK-6/VariablesboundthroughScriptEngine.htm[/url]
/**
* @author exiong
* <p><b>JDK 6 new features. Using script engine(java-script engine to resolve the json object easier.)
*/
public class ScriptEngineImplement {
/**
* @param webServiceURL Request web-service URL
* @param jsonKey script engine request json's key e.g.: json.a.b[0].c Detail information please refer to the java-script json engine.
* @return The text value of the specified jsonKey.
*/
public static String fetchContentFromJSONWebSerivce(String webServiceURL ,String jsonKey)
{
String result = "";
String jsonString = WebserviceContentFetcher.fetchWebServicesContent(webServiceURL);
String temp = String.format("json = %s ; json = json.%s", jsonString , jsonKey);
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("js");
try {
result = se.eval(temp).toString();
} catch (ScriptException e) {
e.printStackTrace();
}
return result;
}
}
代码中的[b]WebserviceContentFetcher.fetchWebServicesContent(webServiceURL);[/b]是我自己写的一个访问webservice数据的类,就是这个webservice给我返回的一串json格式的字符串。然而我需要里面指定的某个元素。于是我使用javaScriptEngine(当然还有很多其他的脚本引擎),构造出一个在js中使用的json对象,通过js来获得指定的元素。
注意: 这个js引擎是本事就带返回值的,但是其中temp中要求是不能有返回值的,也不存在什么定义变量的说法。也就是说不能写成 var json .... return json..类似的语句。其他的我自己还要继续研究。不过这个新特性还是给我提供了很方便的处理json的新方式。