Java Jackson library 1.x数组,如果一个元素有时只是一个字符串
我必须处理奇怪的Json消息 架构中有数组,但如果只有一个元素,数组将成为字符串 所以有时候是这样的:Java Jackson library 1.x数组,如果一个元素有时只是一个字符串,java,json,jackson,Java,Json,Jackson,我必须处理奇怪的Json消息 架构中有数组,但如果只有一个元素,数组将成为字符串 所以有时候是这样的: "Cisco-AVPair": [ "connect-progress=Call Up", "nas-tx-speed=8083000", "nas-rx-speed=8083000" ], 有时: "Cisco-AVPair": "connect-progress
"Cisco-AVPair": [
"connect-progress=Call Up",
"nas-tx-speed=8083000",
"nas-rx-speed=8083000"
],
有时:
"Cisco-AVPair": "connect-progress=Call Up".
如果我使用Jackson 1.8.2,如何克服这个问题
恐怕我无法控制源代码生成,只能解析它
我确实用以下方法分析它:
mapper.readValue(json, refType);
而我的类型引用是:
@JsonProperty("Cisco-AVPair")
private List<String> CiscoAVPair = new ArrayList<String>();
@JsonProperty("Cisco-AVPair")
public List<String> getCiscoAVPair() {
return CiscoAVPair;
}
@JsonProperty("Cisco-AVPair")
public void setCiscoAVPair(List<String> CiscoAVPair) {
this.CiscoAVPair = CiscoAVPair;
}
@JsonProperty(“Cisco AVPair”)
private List CiscoAVPair=new ArrayList();
@JsonProperty(“Cisco AVPair”)
公共列表getCiscoAVPair(){
回风;
}
@JsonProperty(“Cisco AVPair”)
公共无效设置CiscoAVPair(列出CiscoAVPair){
this.CiscoAVPair=CiscoAVPair;
}
正如您所看到的,它是一个字符串列表,但有时只是一个字符串。即使在古老的Jackson 1.8.2中,也有一个特定的配置选项,可以完全满足您的需要 您应该将
ObjectMapper
实例配置为始终将JSON值反序列化为列表
,无论值是作为数组还是作为单个元素。请参阅,了解需要启用的反序列化功能,以及如何在ObjectMapper
实例上实际激活/停用功能
ObjectMapper mapper = ...;
mapper = mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
请记住,
configure()
方法返回另一个ObjectMapper
实例,您是否控制JSON生成?欢迎使用!请澄清问题所在,包括相关代码、一些输入数据和预期输出,以便我们可以帮助您。我不控制生成,我很乐意。是否有任何方法将in用作注释?@AtyabalVZopu我不这么认为。但是当您实际使用mapper.readValue(json,refType)时
要解析JSON,我以为您已经引用了底层的ObjectMapper
。如果是这种情况,我不明白为什么您不能使用您需要始终接收列表的选项来配置它。