最近项目中需要解析从远程返回的json字符串。找了网上一些例子,大部分都需要加入第三方的控件。比如GSON.但是第三方插件大部分都需要创建一个java对象用来映射json字符串。对于复杂的json字符串就可以这样搞。但是如果对于比较简单的json字符串,这样处理就有点浪费资源了。如果能够根据KEY值直接返回一个json的value值就是最好的处理方法。于是想到了能不能调用javascript中的eval来解析json 。通过查找资料发现jdk1.6已经支持对脚本的操作,既然如此,之前的想法就很容易实现了。
下面是我写的一段解析json的代码:
public String processJson(String jsonStr,String key)throws Exception{
//将要执行的javascript语句
String javascript = "function getValue(jsonStr,key){var text=eval('('+jsonStr+')');return text[key];}";
//构造脚本引擎工厂
ScriptEngineManager factory = new ScriptEngineManager();
//获取javascript的脚本引擎
ScriptEngine scriptEngine = factory.getEngineByName("javascript");
//执行js方法
scriptEngine.eval(javascript);
//创建执行上下文
Invocable invocable = (Invocable)scriptEngine;
//调用javascript的getValue方法
String value = (String)invocable.invokeFunction("getValue", new Object[]{jsonStr,key});
return value;
}
参数说明:
jsonstr:获得的json字符串
key:json中的key值
返回值
返回json字符串中与key值相对应的value值。
测试代码:
public class UseService{
public static void main(String args[])throws Exception{
UseService user = new UseService();
String jsonStr = "{'key1':'hello','key2':'word'}";
System.out.println(user.processJson(jsonStr, "key1"));
}
}
执行结果:
hello
一点小发现,分享一下
老婆要求加的链接>>