请记住,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)
虽然我需要使用"点符号"使用展平键的平面地图,如上所述.
我宁愿不自己实现这个,虽然此刻我没有看到任何其他方式......