相关疑难解决方法(0)

如何将JSON反序列化为平面,类似Map的结构?

请记住,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"
               }
           ]
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

应该被反序列化为具有键的类似Map的结构(为了简洁,不包括以上所有内容):

port[0].alias
port[0].enabled
port[0].extendedProperties.connectionTimeout
port[0].threadPool.max
Run Code Online (Sandbox Code Playgroud)

我目前正在调查杰克逊,所以我们有:

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

但是,生成的Map实例基本上是嵌套地图的Map:

{Port={@alias=diagnostics, Enabled=false, Type=DIAGNOSTIC, Number=10033, Protocol=JDWP, ExtendedProperties={Property={@name=suspend, $=n}}}}
Run Code Online (Sandbox Code Playgroud)

虽然我需要使用"点符号"使用展平键的平面地图,如上所述.

我宁愿不自己实现这个,虽然此刻我没有看到任何其他方式......

java json flatten jackson

17
推荐指数
3
解决办法
3万
查看次数

标签 统计

flatten ×1

jackson ×1

java ×1

json ×1