Como desserializar JSON em uma estrutura plana semelhante a um mapa?

Tenha em mente que a estrutura JSON não é conhecida antes, ou seja, é completamente arbitrária, só sabemos que é o formato JSON.

Por exemplo,

O seguinte JSON

{
   "Port":
   {
       "@alias": "defaultHttp",
       "Enabled": "true",
       "Number": "10092",
       "Protocol": "http",
       "KeepAliveTimeout": "20000",
       "ThreadPool":
       {
           "@enabled": "false",
           "Max": "150",
           "ThreadPriority": "5"
       },
       "ExtendedProperties":
       {
           "Property":
           [                         
               {
                   "@name": "connectionTimeout",
                   "$": "20000"
               }
           ]
       }
   }
}

Deve ser desserializado em estrutura semelhante a um mapa, com chaves como (não todas as opções acima incluídas por brevidade):

port[0].alias
port[0].enabled
port[0].extendedProperties.connectionTimeout
port[0].threadPool.max

Eu estou olhando para Jackson atualmente, então temos:

TypeReference<HashMap<String, Object>> typeRef = new TypeReference<HashMap<String, Object>>() {};
Map<String, String> o = objectMapper.readValue(jsonString, typeRef);

No entanto, a instância do Mapa resultante é basicamente um mapa de mapas aninhados:

{Port={@alias=diagnostics, Enabled=false, Type=DIAGNOSTIC, Number=10033, Protocol=JDWP, ExtendedProperties={Property={@name=suspend, $=n}}}}

Enquanto eu preciso de mapa plano com teclas planas usando "notação de ponto", como o acima.

Eu prefiro não implementar isso sozinho, embora no momento eu não veja outra maneira ...

questionAnswers(7)

yourAnswerToTheQuestion