利用 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 文件,代码如下:
这里面提供了一些 toJava 的函数,用于将 JSON 的对象转成对应的 Java 类型。
接下来我们需要初始化脚本引擎 (Tools.java 片段):
然后可通过下面代码进行 JSON 转换:
这就是一个最轻量级的 JSON 转 Java 对象的解决方案:)
下面地址可以查看完整代码:
https://gist.github.com/1521692
转自:oschina开源中国http://www.oschina.net/question/12_35138
详情请看: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
相关文章推荐
- Java利用gson处理json字符串
- 在java中像js那样处理json数据
- Java处理JSON
- 利用jsoncpp库处理json格式数据
- 一个java处理JSON格式数据的通用类
- Java下利用Jackson进行JSON解析和序列化
- 利用xstream处理java中的集合类
- fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
- 关于如何处理JSONObject.fromObject(Object obj)无法转换特殊日期(java.sql.Date,java.sql.Timestamp)格式的问题。
- JAVA处理json复杂对象解决办法
- json处理四部曲之第二曲:利用Jackson处理json
- 利用泛型和反射对Java对象集合转换成Json的工具类
- JAVA工具类分享之《JSON处理:JsonUtil》
- scala 调用 Java 的 fastjson 处理 json
- Java下利用Jackson进行JSON解析和序列化示例
- (更新版)ExtJS Tree利用json(直接传List TreeNode,不需要转化为JSONArray)在Struts 2实现Ajax动态加载树结点
- spring mvc传入参数不仅仅转换为json,还可以直接将json字符串转换为具体的java对象
- java中对于JSON 的处理 fastjson gson 系统自带的JSON 的选择
- 在解压gz文件时,如果直接用java.util.zip.GZIPInputStream来处理问题只能解压很少一部分内容,通过类MultiMemberGZIPInputStream 可以完全解压一个gz文件。
- Java后台如何接收并处理前台传过来的json格式的数组参数