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-core
jestJsonParser
. 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?