将 JSON 解析为自定义 POJO,其中 Map 作为其 class 成员之一
Parsing JSON into custom POJO which has Map as one it's class member
我有下面的 JSON,我想将其解析为下面的 bean classes。
{
"timeStamp": "123123123123",
"pznFlowFlag": "true",
"pznRequestFlag": "true",
"sessionId": "SampleSessionId",
"ipAddress": "172.148.0.1",
"offers": [
{
"111": {
"eep" : "44279",
"spl_ind" : "true"},
"121": {
"eep" : "44520",
"spl_ind" : "false"},
"333": {
"eep" : "45419",
"spl_ind" : "false" }
}]
}
豆子class1个
public class DistributedCookieBean {
@JsonProperty("timeStamp")
private String timeStamp;
@JsonProperty("pznFlowFlag")
private String pznFlowFlag;
@JsonProperty("pznRequestFlag")
private String pznRequestFlag;
@JsonProperty("sessionId")
private String sessionId;
@JsonProperty("ipAddress")
private String ipAddress;
@JsonProperty("offers")
private Map<String, OfferCookieBean> offers = new HashMap<String, OfferCookieBean>();
...<setters & getters>
}
豆子class2
public class OfferCookieBean {
@JsonProperty("eep")
private String eep;
@JsonProperty("spl_ind")
private String spl_ind;
...<setters & getters>
}
这里我无法使用以下代码解析这些 Java POJO。
jsonObjMapper.readValue(jsonString, DistributedCookieBean.class);
堆栈跟踪:
org.codehaus.jackson.map.JsonMappingException:无法从 START_ARRAY 令牌中反序列化 java.util.Map 的实例
在 [来源:json.txt;行:6,列:31]
在 org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159)
在 org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192)
在 org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:134)
在 org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:23)
在 org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:135)
在 org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:221)
在 org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:391)
在 org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:287)
在 org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588)
在 org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1074)
在 Test.main(Test.java:29)
提前致谢!
错误消息指出了问题所在:offers
字段被声明为一个映射,而在 JSON 中它是一个映射数组。
尝试将 Map<String, OfferCookieBean> offers = new HashMap<String, OfferCookieBean>()
更改为 List<Map<String, OfferCookieBean>> offers;
,看看会发生什么。
我有下面的 JSON,我想将其解析为下面的 bean classes。
{
"timeStamp": "123123123123",
"pznFlowFlag": "true",
"pznRequestFlag": "true",
"sessionId": "SampleSessionId",
"ipAddress": "172.148.0.1",
"offers": [
{
"111": {
"eep" : "44279",
"spl_ind" : "true"},
"121": {
"eep" : "44520",
"spl_ind" : "false"},
"333": {
"eep" : "45419",
"spl_ind" : "false" }
}]
}
豆子class1个
public class DistributedCookieBean {
@JsonProperty("timeStamp")
private String timeStamp;
@JsonProperty("pznFlowFlag")
private String pznFlowFlag;
@JsonProperty("pznRequestFlag")
private String pznRequestFlag;
@JsonProperty("sessionId")
private String sessionId;
@JsonProperty("ipAddress")
private String ipAddress;
@JsonProperty("offers")
private Map<String, OfferCookieBean> offers = new HashMap<String, OfferCookieBean>();
...<setters & getters>
}
豆子class2
public class OfferCookieBean {
@JsonProperty("eep")
private String eep;
@JsonProperty("spl_ind")
private String spl_ind;
...<setters & getters>
}
这里我无法使用以下代码解析这些 Java POJO。
jsonObjMapper.readValue(jsonString, DistributedCookieBean.class);
堆栈跟踪:
org.codehaus.jackson.map.JsonMappingException:无法从 START_ARRAY 令牌中反序列化 java.util.Map 的实例 在 [来源:json.txt;行:6,列:31] 在 org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159) 在 org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) 在 org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:134) 在 org.codehaus.jackson.map.deser.MapDeserializer.deserialize(MapDeserializer.java:23) 在 org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:135) 在 org.codehaus.jackson.map.deser.SettableBeanProperty$MethodProperty.deserializeAndSet(SettableBeanProperty.java:221) 在 org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:391) 在 org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:287) 在 org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) 在 org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1074) 在 Test.main(Test.java:29)
提前致谢!
错误消息指出了问题所在:offers
字段被声明为一个映射,而在 JSON 中它是一个映射数组。
尝试将 Map<String, OfferCookieBean> offers = new HashMap<String, OfferCookieBean>()
更改为 List<Map<String, OfferCookieBean>> offers;
,看看会发生什么。