2010-12-09 1 views
1

Ich muss aus einer Datenbank JSON-Dokumente zurückziehen, die nicht auf einem Standardobjekt basieren.Gibt es einen Java JSON Deserializer, der eine Zeichenfolge in ein Wörterbuch von Listen oder Listen von Wörterbüchern primitiver Typen dekodiert

Gibt es eine Möglichkeit JAVA Verwendung dieser Dokumente in Listen & Wörterbücher von primitiven Objekten „deserialisieren“ (string, int, bool, etc ...)

Jede Bibliothek, die diese in beiden Richtungen tun? Mit anderen Worten suche ich nach dem Java-Zähler Teil von System.Runtime.Serialization.Json

+0

Ja. Es gibt eine Reihe von Bibliotheken, die dies tun (siehe http://json.org). Die meisten befassen sich mit einigen "internen" Objekten, die "List" und "Map" entsprechen, um leichter mit der dynamischen Natur der Typen in der Struktur umgehen zu können. (Der Umgang mit 'HashMap ' macht nicht viel Spaß.) –

Antwort

-3

Sorry, aber JSON hat keine Metainformation über Datentypen, so gibt es keine Chance, etwas zurück zu konvertieren nicht auf Standard-Objekte, außer einer Liste von Strings.

UPDATE: Ich könnte daran denken, POGOs mit Groovy aus einem nicht klassifizierten JSON-String zu machen. Dann können Sie auch mit dynamischen Objekten arbeiten. Vielleicht können Sie auch http://json-lib.sourceforge.net/ verwenden.

+0

Ich verstehe, dass JSON nur wenige Typen ohne Metainformationen unterstützt. Was ich von einer JSON-Zeichenfolge benötige, sind nur verschachtelte Wörterbücher und Listen. Ich brauche die letzte Ebene der Verschachtelung vorzugsweise als Zeichenfolgen. – ada

+0

Ich habe meine Antwort aktualisiert. Guck mal. – Christian

+0

Downvoting ohne Kommentar ist unhöflich. Wenn etwas nicht stimmt, sollte zuerst ein Hinweis gegeben werden. – Christian

5

Anstatt zu versuchen, JSON in einen schwierig zu verwendenden Map<String, Object> oder List<Object> zu zwingen, würde ich eine Bibliothek empfehlen, die JSON in einem Baummodell parsen kann. Während viele Bibliotheken so etwas tun können, ist Google Gson mein Favorit. Sie können die Klasse JsonParser verwenden, um JSON als Baum zu analysieren, beginnend mit einem Stamm JsonElement. Sobald Sie die JsonElement haben, sollte es erheblich einfacher zu verwenden als einige Object, die eine List sein könnte und möglicherweise eine Map.

JsonElement e = new JsonParser().parse(someJson); 
if (e.isJsonObject()) { 
    // JsonObject has many of the same methods as a Map 
    JsonObject obj = e.getAsJsonObject(); 
    String foo = obj.get("foo").getAsString(); 
    int bar = obj.get("bar").getAsInt(); 
} else if (e.isJsonArray()) { 
    JsonArray array = e.getAsJsonArray(); 
    // JsonArray implements Iterable and can be used a lot like a List 
    for (JsonElement element : array) { 
    ... 
    } 
} 

Es ist einfach, einen JSON-Baum mit diesen Objekten zu erstellen.

6

Fast jede einzelne Java-Bibliothek unter http://json.org/ kann dies tun, haben Sie tatsächlich versucht, etwas zu finden?

Zum Beispiel mit Jackson Sie tun würden:

ObjectMapper mapper = new ObjectMapper(); 
Map<String,Object> map = mapper.readValue(json, Map.class); 

aber es ist oft bequem, Ihre eigene Java erstellen Objekte abzubilden; Es ist nicht notwendig, Standardobjekte zu verwenden. Zum Beispiel:

public class MyType { 
    public String name; 
    public int age; 
    // and so on 
    public Date createTime; 
    } 

    MyType instance = mapper.readValue(json, MyType.class); 

Weitere Beispiele können Sie Jackson tutorial überprüfen.

1

Flexjson macht es definitiv. Die folgende Zeile deinserialisiert einen jsonString zu einer HashMap

Verwandte Themen