Разбор JSON в Java без знания формата JSON
Я пытаюсь разобрать строку 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
's 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 и получать фактические имена ключей в дополнение к значениям?
Посмотрите на встроенную функцию модели дерева Jacksons.
И ваш код будет таким:
Если вам подходит другая библиотека, вы можете попробовать org.json:
Найти следующий код для неизвестный объект парсинга JSON с использованием библиотеки Дсын.
В JSON из неизвестного формата в частности
написание в JSON и значение в JSON
Быстро получить JSON в Java-объекты (карты), которые вы можете 'дрель' работаете с, вы можете использовать JSON-Ио (https://github.com/jdereg/json-io). Эта библиотека позволит вам читать в строку JSON, и вернуться в 'карта карты' представительство.
Если у вас есть соответствующие классы Java в виртуальной машине, вы можете прочитать JSON в и он будет разбирать его прямо на экземпляры классов Java.
где JSON-это строка, содержащая JSON для чтения. Возвращаемое значение представляет собой карту, где ключи будут содержать поля JSON, а значения содержат значения.
будет читать одну и ту же строку JSON в, и возвращаемое значение будет экземпляр Java, который был сериализован в JSON-формате. Использовать этот API, если у вас есть классы в JVM, которые были написаны
Вас бы устроила
карта
из Джексона?Или, может быть,
JsonNode
?Вот пример я написал показывает, как я разбора JSON и беспорядок каждый номер внутри: