与java捆绑在一起的标准json解析器

dm7nw8vv  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(379)

这个问题在这里已经有答案了

是否可以仅用jdk或httpcomponents处理json响应(3个答案)
6年前关门了。
我需要能够从文件中读取json字符串并对其进行解析。
我想知道字符串是否是“格式良好”的json。如果是这样,我需要能够读取所有的名称-值对。
有没有一个json库与java本身捆绑在一起?
我更喜欢标准java发行版附带的东西,而不是下载另一个外部库。
我正在使用JDK1.6。

0aydgbwb

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);
};
f45qwnt8

f45qwnt82#

javax.scriptAPI内置于1.6中http://docs.oracle.com/javase/6/docs/api/javax/script/package-summary.html

相关问题