Jak deserializować JSON do płaskiej struktury przypominającej mapę?

Należy pamiętać, że struktura JSON nie jest znana przed ręką, tj. Jest całkowicie dowolna, wiemy tylko, że jest to format JSON.

Na przykład,

Następujący JSON

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

Powinieneś zostać rozszeregowany na strukturę podobną do mapy, posiadającą takie klucze (nie wszystkie z powyższych uwzględniono dla zwięzłości):

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

Obecnie patrzę na Jacksona, więc mamy:

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

Jednak wynikowa instancja mapy jest zasadniczo mapą zagnieżdżonych map:

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

Podczas gdy potrzebuję płaskiej mapy ze spłaszczonymi kluczami używając „notacji kropkowej”, jak powyżej.

Wolałbym raczej tego nie realizować, chociaż w tej chwili nie widzę innej drogi ...

questionAnswers(7)

yourAnswerToTheQuestion