Джексон анализирует json на Map с вложенными полями. Правильный анализ вложенного поля на MapJAVA

Программисты JAVA общаются здесь
Anonymous
Джексон анализирует json на Map с вложенными полями. Правильный анализ вложенного поля на Map

Сообщение Anonymous »

У меня есть такой json:

Код: Выделить всё

{
"id": "uuid-1111"
"country": "US",
"car_brand": "Ford",
"info": {
"color": "red",
"weight": 70
}
}
У меня есть класс данных:

Код: Выделить всё

public class Data implements Serializable {

private Map jsonData;

public Map getJsonData() {
return jsonData;
}

public void setJsonData(Map jsonData) {
this.jsonData = jsonData;
}
}
Я анализирую строку json в Map с помощью Джексона, используя:

Код: Выделить всё

HashMap props = new ObjectMapper().readValue(jsonString, new TypeReference() {
});
// assign it to the jsonData attribute:
Data data = new Data();
data.setJsonData(props);
после этого я хотел получить доступ к полю «информация» json (карты), а также проанализировать его в Map следующим образом:

Код: Выделить всё

String infoJson = data().getJsonData().get("info").toString();
HashMap props2 = new ObjectMapper().readValue(infoJson, new TypeReference() {});
но это вызывает JsonProcessingException с сообщением: Неожиданный символ ('c' (код 99)): ожидалось, что имя поля будет начинаться с двойной кавычки
И это правильно, потому что когда я регистрирую infoJson, это выглядит так (обратите внимание, что в нем нет двойных кавычек, поверьте, это произошло потому, что оно уже было сопоставлено ранее) {color=red, Weight=70}
Поэтому я попробовал напрямую выполнить приведение к карте, и это сработало:

Код: Выделить всё

HashMap props = (HashMap) data.getJsonData().get("info");
но, возможно, есть другой, более безопасный способ с Джексоном вместо прямого приведения, если нет, как я могу убедиться, что могу его применить, прежде чем пытаться, чтобы избежать исключений? Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/784 ... sing-of-ne

Вернуться в «JAVA»