这个问题在这里已经有答案了:
是否可以仅用jdk或httpcomponents处理json响应(3个答案)6年前关门了。我需要能够从文件中读取json字符串并对其进行解析。我想知道字符串是否是“格式良好”的json。如果是这样,我需要能够读取所有的名称-值对。有没有一个json库与java本身捆绑在一起?我更喜欢标准java发行版附带的东西,而不是下载另一个外部库。我正在使用JDK1.6。
0aydgbwb1#
尝试不使用外部库的it方法http://blog.julienviet.com/2011/12/26/json-to-java-with-jdk6/编辑github是来自指定链接的更可靠的代码源。https://gist.github.com/vietj/1521692关键是使用javascript进行解析,可以通过以下方式调用:
public class JSON2Java { private static final ScriptEngine jsonParser; static { try { String init = read(Tools.class.getResource("json2java.js")); ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval(init); jsonParser = engine; } catch (Exception e) { // Unexpected throw new AssertionError(e); } } public static Object parseJSON(String json) { try { String eval = "new java.util.concurrent.atomic.AtomicReference(toJava((" + json + ")))"; AtomicReference ret = (AtomicReference)jsonParser.eval(eval); return ret.get(); } catch (ScriptException e) { throw new RuntimeException("Invalid json", e); } } }
javascript部分,json2java.js:
toJava = function(o) { return o == null ? null : o.toJava(); }; Object.prototype.toJava = function() { var m = new java.util.HashMap(); for (var key in this) if (this.hasOwnProperty(key)) m.put(key, toJava(this[key])); 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] = toJava(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); };
f45qwnt82#
javax.scriptAPI内置于1.6中http://docs.oracle.com/javase/6/docs/api/javax/script/package-summary.html
2条答案
按热度按时间0aydgbwb1#
尝试不使用外部库的it方法
http://blog.julienviet.com/2011/12/26/json-to-java-with-jdk6/
编辑
github是来自指定链接的更可靠的代码源。https://gist.github.com/vietj/1521692
关键是使用javascript进行解析,可以通过以下方式调用:
javascript部分,json2java.js:
f45qwnt82#
javax.scriptAPI内置于1.6中http://docs.oracle.com/javase/6/docs/api/javax/script/package-summary.html