我需要使用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.但怎么样?
答案 0 :(得分:0)
通常情况下,你只需使用ObjectMapper
并传递TypeReference
作为参数:
final TypeReference typeRef = new TypeReference<Map<K, ValueClass<V>>>(){};
return mapper.readValue(theFileObject, typeRef);
这应该是开箱即用的。如果没有,将抛出一个例子并指出问题所在。