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

Schreibe einen Kommentar