我有一個CSV文件看起來像這樣:如何將錶轉換爲地圖的地圖
request.car.model (STRING),request.car.make (STRING),request.person.lastname (STRING),other.person.birthdate (DATE),other.person.length (INTEGER)
BMW,7 series,Doe,31/12/1980,170
Tesla,Model S,Smith,1/1/1975,172
Volvo,C40,Johnson,13/11/1982,189
第一行頭,與被括號之間解析類型。標題使用點符號,非常像Javascript會解析一個複雜的對象。
我需要做的是爲CSV文件中的每一行創建一個Java Map<String, Serializable>
。例如,第一行需要導致map
在Java中看起來像這樣:
Map<String, Serializable> requestCarMap = new HashMap<>();
requestCarMap.put("make", "BMW");
requestCarMap.put("model", "7 series");
Map<String, Serializable> requestPersonMap = new HashMap<>();
requestPersonMap.put("lastName", "Doe");
Map<String, Serializable> requestMap = new HashMap<>();
requestMap.put("car", (HashMap) requestCarMap);
requestMap.put("pesron", (HashMap) requestPersonMap);
Map<String, Serializable> otherPersonMap = new HashMap<>();
otherPersonMap.put("birthdate", new Date(1980,12,31));
Map<String, Serializable> otherMap = new HashMap<>();
otherMap.put("person", (HashMap) otherPersonMap);
Map<String, Serializable> map = new HashMap<>();
map.put("request", (HashMap) requestMap);
map.put("other", (HashMap) otherMap);
我目前有創建一個基於價值觀的地圖,但是,如果沒有分裂頭,並把它在子圖的方法:
protected static Map<String, Serializable> parseRecord(CSVRecord record, CSVRecord header) {
final Map<String, Serializable> map = new HashMap<>();
for (int i = 0; i < record.size(); i++) {
String headerField = getHeader(header.get(i));
String[] headerFieldPart = headerField.split("\\.");
String headerFieldType = getHeaderFieldType(header.get(i));
Object recordField = getRecordField(headerFieldType, record.get(i));
if (recordField != null) {
map.put(headerField, (Serializable) recordField);
} else {
log.warn("Skipped value for record item: "
+ record.get(i));
}
}
return map;
}
我怎樣才能把在子圖中的值作爲例如在通用的方式?我不知道列的名稱或地圖的前面嵌套深度。我無法弄清楚在subMap不存在,存在等情況下工作的邏輯。任何智能解決方案?任何能幫助我解決這個問題的庫?
與所提供的CSV測試,它的工作原理就像一個魅力。非常感謝你! –