java – 使用Jackson反序列化包含在具有未知属性名称的对象中的JSON
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用Jackson反序列化包含在具有未知属性名称的对象中的JSON,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1289字,纯文字阅读大概需要2分钟。
内容图文
![java – 使用Jackson反序列化包含在具有未知属性名称的对象中的JSON](/upload/InfoBanner/zyjiaocheng/796/cca57b3c1afc405db89ff071f55d234d.jpg)
我正在使用Jackson将JSON从ReST API反序列化为使用Jackson的Java对象.
我遇到的问题是,一个特定的ReST响应包含在由数字标识符引用的对象中,如下所示:
{
"1443": [
/* these are the objects I actually care about */
{
"name": "V1",
"count": 1999,
"distinctCount": 1999
/* other properties */
},
{
"name": "V2",
"count": 1999,
"distinctCount": 42
/* other properties */
},
...
]
}
我的(可能是天真的)将JSON反序列化的方法一直是创建镜像POJO并让Jackson简单地自动映射所有字段,这很好.
问题是ReST响应JSON对我实际需要的POJO数组有一个动态的数字引用.我无法创建镜像包装器POJO,因为属性名称本身既是动态的又是非法的Java属性名称.
我很感激我可以调查的路线的任何和所有建议.
解决方法:
没有自定义反序列化器的最简单的解决方案是使用@JsonAnySetter. Jackson将为每个未映射的属性调用带有此注释的方法.
例如:
public class Wrapper {
public List<Stuff> stuff;
// this will get called for every key in the root object
@JsonAnySetter
public void set(String code, List<Stuff> stuff) {
// code is "1443", stuff is the list with stuff
this.stuff = stuff;
}
}
// simple stuff class with everything public for demonstration only
public class Stuff {
public String name;
public int count;
public int distinctCount;
}
要使用它,你可以这样做:
new ObjectMapper().readValue(myJson, Wrapper.class);
换句话说,你可以使用@JsonAnyGetter,在这种情况下应该返回Map< String,List< Stuff>).
内容总结
以上是互联网集市为您收集整理的java – 使用Jackson反序列化包含在具有未知属性名称的对象中的JSON全部内容,希望文章能够帮你解决java – 使用Jackson反序列化包含在具有未知属性名称的对象中的JSON所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。