Json用字符串和数组映射到

时间:2019-03-22 00:23:42

标签: java jackson

说我有

{
   "foo" : "bar",
   "other-foo": "baz",
   "list-foo" : [
      "x": "y",
      "w":"z"
    ]
}

如何将其设为Map?我知道我可以使用杰克逊...但是我真的不能称其为Map<String, String>Map<String, Object>Map<String, List>,这是一种不错的简洁方法,还是制造对象的答案一直代表着这个?

1 个答案:

答案 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集合进行反序列化。