Я пытаюсь динамически разобрать некоторые JSON на карту. Следующее хорошо работает с простым JSONВложенные Json на карту с использованием Jackson
String easyString = "{\"name\":\"mkyong\", \"age\":\"29\"}";
Map<String,String> map = new HashMap<String,String>();
ObjectMapper mapper = new ObjectMapper();
map = mapper.readValue(easyString,
new TypeReference<HashMap<String,String>>(){});
System.out.println(map);
Но терпит неудачу, когда я пытаюсь использовать некоторые более сложные JSON с вложенной информацией. Я пытаюсь разобрать выборочные данные из json.org
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": [
"GML",
"XML"
]
},
"GlossSee": "markup"
}
}
}
}
}
Я получаю следующую ошибку
Исключения в потоке «основной» com.fasterxml.jackson.databind.JsonMappingException: Невозможно десериализация экземпляра java.lang.String из токена START_OBJECT
Есть ли способ разбора сложных данных JSON на карту?
Вы хотите получить результат в простой карте ключа/значения? Как вы думаете, данные JSON будут представлены на такой карте? Какими будут ключи и ценности? –
Я думаю, что ошибка связана с тем, что в минуту Джексон встречает символ {, он рассматривает оставшийся контент как новый объект, а не строку. Вы пробовали определить свою карту как HashMap? –
JamesB
James no Я еще не пробовал. Cyrille, я пытаюсь разобрать JSON dynamiclly, не создавая объект со статической структурой. Приложение, над которым я работаю, получит JSON, я не буду знать, что схема впереди времени. В идеале, я хочу, чтобы у меня было какое-то сопоставление, в котором хранился JSON, поэтому я могу пройти через него сверху вниз, не зная об этом заранее, и пусть пользователь выбирает, какие данные они хотят вернуть. – user2229544