Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson library 1.x数组,如果一个元素有时只是一个字符串_Java_Json_Jackson - Fatal编程技术网

Java Jackson library 1.x数组,如果一个元素有时只是一个字符串

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

我必须处理奇怪的Json消息

架构中有数组,但如果只有一个元素,数组将成为字符串

所以有时候是这样的:

        "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
。如果是这种情况,我不明白为什么您不能使用您需要始终接收
列表的选项来配置它。