Przetwarzanie JSON w Javie bez znajomości formatu JSON

Usiłuję przeanalizować łańcuchy JSON w Javie i znaleźć pary klucz-wartość, dzięki czemu mogę określić przybliżoną strukturę obiektu JSON, ponieważ struktura obiektu łańcucha JSON jest nieznana.

Na przykład jedno wykonanie może mieć łańcuch JSON podobny do tego:

  {"id" : 12345, "days" : [ "Monday", "Wednesday" ], "person" : { "firstName" : "David", "lastName" : "Menoyo" } }

I inny taki:

  {"url" : "http://someurl.com", "method" : "POST", "isauth" : false }

Jak przechodzę przez różne elementy JSON i ustalam klucze i ich wartości? spojrzałem najackson-corejestJsonParser. Widzę, jak mogę złapać następny „token” i określić, jaki to jest typ tokena (tj. Nazwa pola, wartość, początek tablicy itp.), Ale nie wiem, jak pobrać rzeczywistą wartość tokena.

Na przykład:

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

Czy jest klasa wjackson lub jakąś inną bibliotekę (gson lubsimple-json), która tworzy drzewo lub pozwala na cykliczne przechodzenie przez elementy json i uzyskiwanie rzeczywistych nazw kluczy oprócz wartości?

questionAnswers(7)

yourAnswerToTheQuestion