说我有
{
"foo" : "bar",
"other-foo": "baz",
"list-foo" : [
"x": "y",
"w":"z"
]
}
如何将其设为Map
?我知道我可以使用杰克逊...但是我真的不能称其为Map<String, String>
或Map<String, Object>
或Map<String, List>
,这是一种不错的简洁方法,还是制造对象的答案一直代表着这个?
答案 0 :(得分:2)
如果您未提供目标的Class或TypeReference
Jackson会自动将json对象反序列化为Map<String,Object>
,实际上是由LinkedHashMap<String,Object>
实现的,它保留了JSON中的属性顺序。
在地图中将有一个键为“ list-foo”且值为Map<String,Object>
的条目。
或者您可以为Jackson定义反序列化的专业类。
如果可以,Jackson将反序列化为您定义的类。
如果您向杰克逊提供Class或TypeReference作为目标,它将尝试生成所请求类的实例。
通常,您可以提供满足以下条件之一的课程
该类是具有遵循bean命名约定的公共设置方法的bean。
该类具有与json属性名称匹配的公共成员字段。
该类具有用Jackson注释注释的公共setter方法。
该类实现JsonSerializable接口并具有序列化方法。
或者如果您已经创建了一个自定义序列化程序,并使用Jackson批注将其与类相关联。
该类的任何成员字段也可以基于相同的条件或者是Jackson识别的原始类型,枚举或Java集合进行反序列化。