JSON in Java analysieren, ohne das JSON-Format zu kennen
Ich versuche zu Parsen von JSON-strings in Java-und den Schlüssel-Wert-Paaren, so dass ich können bestimmen, dass die Ungefähre Struktur der JSON-Objekt, da die Objekt-Struktur der JSON-string ist unbekannt.
Beispielsweise eine Ausführung haben kann, einen JSON-string so:
{"id" : 12345, "days" : [ "Monday", "Wednesday" ], "person" : { "firstName" : "David", "lastName" : "Menoyo" } }
Und andere, wie diese:
{"url" : "http://someurl.com", "method" : "POST", "isauth" : false }
Wie würde ich Zyklus durch die verschiedenen JSON-Elemente und bestimmen die Schlüssel und Ihre Werte? Ich schaute auf jackson-core
's JsonParser
. Ich sehe, wie ich kann schnappen Sie sich den nächsten "token" und bestimmen, welche Art von token es ist (d.h. das Feld "name", value, array starten, etc), aber ich weiß nicht, wie zu greifen, die tatsächliche token-Wert.
Beispiel:
public void parse(String json) {
try {
JsonFactory f = new JsonFactory();
JsonParser parser = f.createParser(json);
JsonToken token = parser.nextToken();
while (token != null) {
if (token.equals(JsonToken.START_ARRAY)) {
logger.debug("Start Array : " + token.toString());
} else if (token.equals(JsonToken.END_ARRAY)) {
logger.debug("End Array : " + token.toString());
} else if (token.equals(JsonToken.START_OBJECT)) {
logger.debug("Start Object : " + token.toString());
} else if (token.equals(JsonToken.END_OBJECT)) {
logger.debug("End Object : " + token.toString());
} else if (token.equals(JsonToken.FIELD_NAME)) {
logger.debug("Field Name : " + token.toString());
} else if (token.equals(JsonToken.VALUE_FALSE)) {
logger.debug("Value False : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NULL)) {
logger.debug("Value Null : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NUMBER_FLOAT)) {
logger.debug("Value Number Float : " + token.toString());
} else if (token.equals(JsonToken.VALUE_NUMBER_INT)) {
logger.debug("Value Number Int : " + token.toString());
} else if (token.equals(JsonToken.VALUE_STRING)) {
logger.debug("Value String : " + token.toString());
} else if (token.equals(JsonToken.VALUE_TRUE)) {
logger.debug("Value True : " + token.toString());
} else {
logger.debug("Something else : " + token.toString());
}
token = parser.nextToken();
}
} catch (Exception e) {
logger.error("", e);
}
}
Gibt es eine Klasse, in der jackson
oder eine andere Bibliothek (gson
oder simple-json
) erzeugt einen Baum, oder erlaubt das Blättern durch die json-Elemente und erhalten die tatsächlichen Namen von Tasten zusätzlich zu den Werten?
InformationsquelleAutor der Frage whyceewhite | 2013-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf Jacksons built-in-Modell-feature-Baum.
Und Ihr code werden:
InformationsquelleAutor der Antwort user987339
Wenn eine andere Bibliothek ist in Ordnung für Sie, Sie könnten versuchen,org.json:
InformationsquelleAutor der Antwort Ignitor
Finden Sie den folgenden code für Unbekannte Json-Objekt-Analyse mit Gson-Bibliothek.
InformationsquelleAutor der Antwort chandrasekhar majji
JSON unbekannten format zu HashMap
schreiben JSON Und Lesen Json
InformationsquelleAutor der Antwort Yash
Wären Sie zufrieden mit einem
Map
von Jackson?Oder vielleicht ein
JsonNode
?InformationsquelleAutor der Antwort Vidya
Bekommen schnell JSON in Java-Objekte (Karten), die Sie dann 'drill' und die Arbeit mit, können Sie json-io (https://github.com/jdereg/json-io). Diese Bibliothek wird lassen Sie Sie Lesen, in einen JSON-String, und wieder eine " Map of Maps-Darstellung.
Wenn Sie über die entsprechenden Java-Klassen in Ihre JVM, können Sie Lesen Sie die JSON-in und es zu analysieren es direkt in Instanzen von Java-Klassen.
wo ist json String mit JSON zu Lesen. Der Rückgabewert ist eine Karte, wo die Schlüssel enthalten, die die JSON-Felder, die Werte enthalten die zugehörigen Werte.
gleich Lesen werdet JSON-string, und der return-Wert wird die Java-Instanz serialisiert wurde in das JSON-Format. Verwenden Sie diese API, wenn Sie die Klassen in Ihre JVM, die geschrieben wurden von
InformationsquelleAutor der Antwort John DeRegnaucourt
Hier ist ein Beispiel das ich schrieb, zeigt, wie ich Parsen einer json-und Durcheinander, jede Zahl im inneren:
InformationsquelleAutor der Antwort Peiming Hu