Java 如何使用Jackson流式API将以下文件反序列化为泛型类型变量
关于如何使用Jackson流式API将以下文件反序列化为泛型类型变量,我有一个问题Java 如何使用Jackson流式API将以下文件反序列化为泛型类型变量,java,jackson,Java,Jackson,关于如何使用Jackson流式API将以下文件反序列化为泛型类型变量,我有一个问题 { “key1”: {“value”:{…} }, “key2”: {“value”:{…} }, “key3”: {“value”:{…}} } 我有一些代码可以使用以下方法反序列化整个文件: Map<K, ValueClass<V>> map = mapper.readValue(new File(fileName), someTypeReferForMapFunc ());
{ “key1”: {“value”:{…} },
“key2”: {“value”:{…} },
“key3”: {“value”:{…}}
}
我有一些代码可以使用以下方法反序列化整个文件:
Map<K, ValueClass<V>> map = mapper.readValue(new File(fileName), someTypeReferForMapFunc ());
then store to a HashMap using put (omit here)
还是失败了。有人知道我如何读取K类型的密钥,以便将K密钥放入Kvmap吗
谢谢,Hmm,你的问题不清楚,什么是K类,地图键的类,如果不是字符串的话。枚举?映射键的通用类。就像HashMap中的K一样。它可以是任何类型。你知道泛型是占位符吗?你不能实例化泛型,如果你需要一个实例,你总是需要一个特定的类。当然,一些处理数据的方法可以是泛型的。因此,此类方法接收泛型参数。但要实例化一个对象,应该决定它是什么类型。当您编写jp.readValueAsAClass.class时,您指示Jackson实例化该partucular类或反映AClass的类(如果后者是接口),并用Json流中的数据填充它。
private HashMap<K, ValueClass<V>> loadFileUsingStreamAPI(String fileName){
JsonFactory f = new MappingJsonFactory();
JsonParser jp = f.createJsonParser(new File(fileName));
JsonToken current;
HashMap<K, ValueClass<V>> kvmap = new HashMap(...);
current = jp.nextToken();
if (current != JsonToken.START_OBJECT) {
System.out.println("Error: root should be object: quiting.");
return;
}
while (jp.nextToken() != JsonToken.END_OBJECT) {
String key = jp.getCurrentName(); (1)
current = jp.nextToken();
if (current == JsonToken.START_OBJECT) {
ValueClass val = mapper.readValue (jp, ValueClass.class);
Kvmap.put(key, val); //(2)
}
else {skip to next object...}
}
return Kvmap;
}
K key = (K)jp.readValueAs(String.class);