Я пытаюсь разобрать строки JSON в Java и найти пары ключ-значение, чтобы я мог определить приблизительную структуру объекта JSON, поскольку объектная структура строки JSON неизвестна.
Например, одно исполнение может иметь строку JSON, например:
{"id" : 12345, "days" : [ "Monday", "Wednesday" ], "person" : { "firstName" : "David", "lastName" : "Menoyo" } }
И еще один такой:
{"url" : "http://someurl.com", "method" : "POST", "isauth" : false }
Как бы я мог перебирать различные элементы JSON и определять ключи и их значения? Я посмотрел на jackson-core
JsonParser
. Я вижу, как я могу захватить следующий "токен" и определить тип маркера (т.е. Имя поля, значение, начало массива и т.д.), Но я не знаю, как получить фактическое значение токена.
Например:
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);
}
}
Есть ли класс в jackson
или какой-либо другой библиотеке (gson
или simple-json
), которая создает дерево или позволяет циклически перебирать элементы json и получать фактические имена ключей в дополнение к значениям?