[英]how to convert a string to generic type object
我需要使用Jackson流API反序列化以下文件。
{ “key1”: {“value”:{…} },
“key2”: {“value”:{…} },
“key3”: {“value”:{…}},
....
“keyn”: {“value”:{…}}
}
然后使用kvmap.put(K,ValueClass);將其放入HashMap kvmap。 我的理解是這樣做的方法是:我必須使用jp.getCurrentName()解析K的字符串,然后使用mapper.readValue(jp,ValueClass.class)獲得ValueClass。 即:
private <K, V> HashMap<K, ValueClass<V>> loadFileStream(File f)
ObjectMapper mapper = new ObjectMapper();
HashMap<K, ValueClass<V>> kvmap = ...
....
current = jp.nextToken();
if (current != JsonToken.START_OBJECT) {
return with error information.
}
while (jp.nextToken() != JsonToken.END_OBJECT) {
String key = jp.getCurrentName();
K = implement a function to convert from key to K;
current = jp.nextToken();
if (current == JsonToken.START_OBJECT) {
ValueClass<V> value = mapper.readValue(jp, ValueClass.class);
kvmap.put(K, value);
}
else {jp.skipChildren();}
}
return kvmap;
}
我的理解是,反序列化密鑰的唯一方法是jp.getCurrentName(),因為它不作為json格式包含在{}中,因此我無法使用readValue()之類的方法來獲取它。 這是正確的嗎? 那么我的問題是如何實現從字符串鍵轉換為通用類型K的函數? 我認為,如果readValue()可以將字符串轉換為相應的泛型類型,那么理想情況下,我也應該能夠將字符串鍵也轉換為泛型K。 但是如何?
通常,您可以為此使用ObjectMapper
並將TypeReference
作為參數傳遞給它:
final TypeReference typeRef = new TypeReference<Map<K, ValueClass<V>>>(){};
return mapper.readValue(theFileObject, typeRef);
這應該開箱即用。 否則,將拋出異常並指出問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.