Имейте в виду, что структура JSON неизвестна заранее, т. Е. Полностью произвольна, мы знаем только, что это формат JSON.Как десериализовать JSON в плоскую, картографическую структуру?
Например,
В следующем формате JSON
{
"Port":
{
"@alias": "defaultHttp",
"Enabled": "true",
"Number": "10092",
"Protocol": "http",
"KeepAliveTimeout": "20000",
"ThreadPool":
{
"@enabled": "false",
"Max": "150",
"ThreadPriority": "5"
},
"ExtendedProperties":
{
"Property":
[
{
"@name": "connectionTimeout",
"$": "20000"
}
]
}
}
}
Должно быть десериализации в Map-подобные структуры, имеющие ключи, такие как (не все из вышеперечисленных включены для краткости):
port[0].alias
port[0].enabled
port[0].extendedProperties.connectionTimeout
port[0].threadPool.max
Сейчас я изучаю Джексон, так что у нас есть:
TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {};
Map<String, String> o = objectMapper.readValue(jsonString, typeRef);
Однако полученный экземпляр карты в основном Карта вложенных Maps:
{Port={@alias=diagnostics, Enabled=false, Type=DIAGNOSTIC, Number=10033, Protocol=JDWP, ExtendedProperties={Property={@name=suspend, $=n}}}}
В то время как мне нужна плоская карта с Свести ключи с использованием «точечная нотации», как выше.
Я не хотел бы реализовать это сам, хотя в данный момент я не вижу никакого другого пути ...
Jackson (или любая другая библиотека JSON) может преобразовывать JSON в карту карт. Переход на лишнюю милю не является тривиальным, и пример синтаксиса, который вы показываете, никогда не может быть сгенерирован во время выполнения в java. Вы можете добиться чего-то похожего на то, что вам нужно, используя библиотеку [Configafe Config] (https://github.com/typesafehub/config). –
ОК, поэтому я сделал Config parseString = ConfigFactory.parseString (portJsonString); Какой toString() имеет значение: Config (SimpleConfigObject ({«Port»: {«Enabled»: «false», «Number»: «10033», «Type»: «DIAGNOSTIC», «@ alias»: «диагностика "," ExtendedProperties ": {" Свойство ": {" @ name ":" suspend "," $ ":" n "}}," Protocol ":" JDWP "}})) Но я не уверен, как сгладить это через Configafe Config lib? – Svilen
Добавлен ответ. Надеюсь, это поможет. –