使用Jackson将反序列化为Map
我有一个带有两个属性的JSON对象:“key”是一个字符串,“value”可以反序列化为Java bean。
{ "key": "foo", "value": "bar" }
问题是,给定这些对象的列表,我可以将其反序列化为Map吗?
[{"key": "foo1", "value": "bar1"}, {"key": "foo2", "value": "bar2"}] -> Map
目前使用Jackson-databind 2.1
您可以轻松地将以上JSON转换为List
:
import java.util.List; import java.util.Map; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.CollectionType; public class JacksonProgram { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); CollectionType mapCollectionType = mapper.getTypeFactory().constructCollectionType(List.class, Map.class); List
以上程序打印:
[{key=foo1, value=bar1}, {key=foo2, value=bar2}]
由于您的结构不匹配,您有两个基本选项:
- 使用两阶段处理:使用Jackson绑定到匹配的中间表示(可以是
JsonNode
或List
),然后使用简单代码转换为所需类型 - 编写自定义序列化器和/或反序列化器
Jackson不支持广泛的结构转换(有一些简单的结构转换,比如@JsonUnwrapped
),因此这种function不太可能添加到数据绑定模块中。 虽然它可以作为扩展模块添加,但如果这些“智能地图”类型的结构是常用的(不幸的是它们似乎)。