利用 Java 6 直接處理 JSON
一般在 Java 中處理 JSON 數據,我們會用到各種 json 的第三方 jar 包
詳情請看: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 對象的解決方案:)
下面地址可以查看完整代碼:
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!