簡體   English   中英

如何將字符串轉換為通用類型對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM