您的位置:首页 > 编程语言 > Java开发

利用 Java 6 直接处理 JSON

2011-12-27 10:10 323 查看
一般在 Java 中处理 JSON 数据,我们会用到各种 json 的第三方 jar 包

详情请看:Java 的 JSON 开发包

如果不需要这些 jar 包的话,Java 本身能否处理 JSON 呢?

答案当然是可以,Java 6 提供了 javax.script 包让 Java 有了支持其他脚本语言的特性,例如 JavaScript。而 JavaScript 对 JSON 的支持是天生具备的。

下面步骤讲述如何在 Java 中直接处理 JSON 数据:

首先我们编写一个 json2java.js 文件,代码如下:

Object.prototype.toJava = function() {
var m = new java.util.HashMap();
for (var key in this)
if (this.hasOwnProperty(key))
m.put(key, this[key].toJava());
return m;
};
Array.prototype.toJava = function() {
var l = this.length;
var a = new java.lang.reflect.Array.newInstance(java.lang.Object, l);
for (var i = 0;i < l;i++)
a[i] = this[i];
return a;
};
String.prototype.toJava = function() {
return new java.lang.String(this);
};
Boolean.prototype.toJava = function() {
return java.lang.Boolean.valueOf(this);
};
Number.prototype.toJava = function() {
return java.lang.Integer(this);
};

这里面提供了一些 toJava 的函数,用于将 JSON 的对象转成对应的 Java 类型。
接下来我们需要初始化脚本引擎 (Tools.java 片段):

String init = read(Tools.class.getResource("json2java.js"));
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.eval(init);
jsonParser = engine;

然后可通过下面代码进行 JSON 转换:

Bindings bindings = new SimpleBindings();
String eval = "var tmp = (" + json + ");var o = new AtomicReference(tmp.toJava());";
jsonParser.eval(eval, bindings);
AtomicReference ret = (AtomicReference)bindings.get("o");
return ret.get();

这就是一个最轻量级的 JSON 转 Java 对象的解决方案:)

下面地址可以查看完整代码:

https://gist.github.com/1521692

转自:oschina开源中国http://www.oschina.net/question/12_35138
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: