使用 Jackson 2 将数组反序列化为字符串的问题
这与使用 Jackson 将 String 中的 ArrayList 反序列化类似的问题
传入的 JSON(我无法控制)有一个元素“thelist”,它是一个数组。但是,有时这会以空字符串而不是数组的形式出现:
例如。而不是"thelist" : [ ]
它以"thelist" : ""的形式出现
我无法解析这两种情况。
工作正常的“sample.json”文件:
{
"name" : "widget",
"thelist" :
[
{"height":"ht1","width":"wd1"},
{"height":"ht2","width":"wd2"}
]
}
课程:
public class Product {
private String name;
private List<Things> thelist;
// with normal getters and setters not shown
}
public class Things {
String height;
String width;
// with normal getters and setters not shown
}
工作正常的代码:
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test2 {
public static void main(String[] args)
{
ObjectMapper mapper = new ObjectMapper();
Product product = mapper.readValue( new File("sample.json"), Product.class);
}
}
但是,当 JSON 有一个空字符串而不是一个数组时,即。“thelist”:“”
我得到这个错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [collection type; class java.util.ArrayList, contains [simple type, class com.test.Things]] from JSON String; no single-String constructor/factory method (through reference chain: com.test.Product["thelist"])
如果我添加这一行(这适用于 Ryan 在Deserialize ArrayList from String using Jackson并且似乎受到文档的支持),
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
没什么区别。
还有其他设置,还是我需要编写自定义反序列化器?
如果是后者,是否有使用 Jackson 2.0.4 执行此操作的简单示例?
我是杰克逊的新手(也是第一次发帖,所以要温柔)。我做了很多搜索,但找不到一个好的工作示例。