2014-09-29 8 views
8

Devo essere in grado di leggere una stringa JSON da un file e analizzarla.Analizzatore JSON standard fornito in dotazione con Java

Voglio sapere se la stringa è un JSON "ben formato". Se è così, devo essere in grado di leggere tutte le coppie di valori nominali.

Esiste una libreria JSON fornita in bundle con Java stesso?

Preferirei qualcosa che viene fornito con la distribuzione standard di Java invece di scaricare un'altra libreria esterna.

Sto usando JDK 1.6.

+0

Non a mia conoscenza. La maggior parte dei parser JSON per Java sono elencati su json.org, nella parte inferiore della pagina. –

+0

Alcune persone sembrano usare rhino http://stackoverflow.com/questions/10288669/access-rhinos-native-json-stringify-from-java/10837358 –

+0

qualcuno ha usato json-simple, è un kit di strumenti json da google https : //code.google.com/p/json-simple/ – davison

risposta

4

Prova ora avvicinarsi senza usare librerie esterne

http://blog.julienviet.com/2011/12/26/json-to-java-with-jdk6/

CURA

GitHub è fonte più affidabile del codice da collegamento specificato. https://gist.github.com/vietj/1521692

La chiave è quella di utilizzare javascript per analizzare, può essere invocato con:

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 parte, 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); 
}; 
+0

Vorrei poter sopravvivere questo !! Grazie!! – davison

+1

Questa [risposta sembra essere in un altro castello] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer-not-an- risposta). Invece di limitarsi a collegarsi a una risorsa esterna, il materiale pertinente dovrebbe essere pubblicato qui, dando la giusta attribuzione. Ciò consentirà alla risposta di rimanere rilevante anche se il collegamento si spegne in futuro. –

+0

@davison Quindi puoi accettare la mia richiesta. :) – kemenov

Problemi correlati