【发布时间】:2014-09-01 22:35:33
【问题描述】:
如果能帮助我了解使用 Jackson Annotations 将我们从 Salesforce 收到的以下 JSON 响应反序列化为 Java 对象的最佳方法,我将不胜感激。
"records": [
{
"attributes": {
"type": "Lead",
"url": "/services/data/v30.0/sobjects/Lead/00Qi000000Jr44XEAR"
},
"Id": "00Qi000000Jr44XEAR",
"Name": "Kristen Akin",
"Address": {
"city": null,
"country": "USA",
"state": "CA",
"stateCode": null,
"street": null
},
"Phone": "(434) 369-3100",
},
{
"attributes": {
"type": "Lead",
"url": "/services/data/v30.0/sobjects/Lead/00Qi000000Jugv2EAB"
},
"Id": "00Qi000000Jugv2EAB",
"Name": "Sarah Jones",
"Address": {
"city": null,
"country": null,
"state": "CA",
"stateCode": null,
"street": null
},
"Phone": "(408) 338-6066",
}
]}
上面的 JSON 响应是一个包含 2 个元素的数组。我想将此 JSON 结构表示为使用 Jackson 的 Java 集合,例如:
@JsonProperty("records")
ArrayList<LinkedHashMap<?, ?>> recordList
上述对象表示反序列化 JSON 响应并表示为 HashMap 中的键值对,但问题是表示“属性”和“地址”子文档。在上面的 HashMap 中,它们的值被表示为相应的 JSON 子文档,而我更希望将 Attributes 子文档映射到 Attribute 对象,并且类似地,将 Address 子文档映射到 HashMap 中的 Address 对象,例如:
Key Value
attributes <Attributes> object
Id 00Qi000000Jr44XEAR
.....
Address <Address> object
Phone (434) 369-3100
在进行了一些 Google 搜索后,我想我可能必须使用 @JsonTypeInfo 和 @JsonSubTypes 属性,正如 link 中提到的那样。
但是,我不知道如何在这个特定场景中使用这些注释。感谢您对此的任何帮助。
【问题讨论】:
-
LinkedHashMap中的 Key 和 Value 的类型是什么 -
键为字符串,值为对象
-
Attributes和Address是您的自定义类吗? -
是的,
Attributes和Address是我的自定义类。
标签: java json jackson deserialization