【发布时间】:2021-09-23 12:08:29
【问题描述】:
我需要从必须从 .csv 文件生成的 hashmap 创建多维 json。
来自 csv 的 Hashmap 映射工作正常。
如果我用简单的ObjectMapper 转换创建的Hashmap,我只会得到一个具有HastMap 的所有属性的单一维度json。
是否可以检查Hashmap 的keys,如果键以“baseData”开头,它会进入子对象baseData,如下面的json。
{
"testCaseData": {
"baseData": {
"verkaufsproduktart": "special",
"tarifgeneration": "string",
"ursprungAngebotsnummer": "string",
"mandant": "string",
"sparte": "string",
"beratungsprotokollId": "string",
"bonitaet": "string",
"verkaufsname": "string",
"aktionsnummer": "string",
"erstellernummer": "string",
"verkaufsprozessart": "string",
"kanalrichtung": "string",
"versandweg": "string",
"vertriebskanal": "TELEFON",
"quellsystem": "standard",
"kundenberater": "String",
"vsnrErgoDirekt": "string",
"vsnrRisikotraeger": "string",
"versicherungen": [],
"leistungsvereinbarungen": [],
"beitraege": [],
"abbuchungstagImMonat": "TAG_1",
"zahlweise": "EINMALZAHLUNG",
"angebotsstatus": "string",
"angebotsstatusaenderung": "date",
"haustarif": true,
"versicherungsBeginn": "2020-01-01",
"rabattWert": "PROZENT_2"
},
"storeData": {
"personDataStore": [{
"adresse": {
"hausnummer": "string",
"land": "Deutschland",
"ort": "string",
"postleitzahl": "string",
"strasse": "string"
}]
}
}
像testCaseData 和baseData 这样的对象名称是固定的并且是已知的。例如baseData 中的其余数据需要是通用的(这就是我使用hashmap 的原因)。
感谢您的帮助
编辑:
当前映射器
public void getHashmapFromCsv(InputStream csvFile) throws IOException {
HashMap<String, String> map = new HashMap<String, String>();
BufferedReader br = new BufferedReader(new InputStreamReader(csvFile));
List<String> completeInputList =
br.lines().collect(Collectors.toList());
String[] baseLineArray = completeInputList.get(0).split(";");
for (String singleCase : completeInputList.subList(1,
completeInputList.size())) {
String[] singleCaseArray = singleCase.split(";");
for (int i = 0; i < baseLineArray.length; i++) {
if (i > singleCaseArray.length-1 ||
singleCaseArray[i].equals("")) {
map.put(baseLineArray[i], null);
} else {
map.put(baseLineArray[i], singleCaseArray[i]);
}
}
}
System.out.println(map);
ObjectMapper Obj = new ObjectMapper().enable(SerializationFeature.WRAP_ROOT_VALUE);
Obj.setSerializationInclusion(JsonInclude.Include.NON_NULL);
String jsonStr = Obj.writeValueAsString(map);
}
}
{baseData_kundenberaternummer=12346798, VP3 Kdnr=null, beratungsprotokollId=BERATUNGSVERZICHT, VP3 Nachname=null, VN Postleitzahl=90344, abbuchungstagImMonat=J, telemarketingnummer=123456789, VP4 Titel=null, baseData_aktionsnummer=1000, VP4 Hausnummer=null, mandant=1, VP3 Vorname=null, VP1 Vorname=null, VP4 baseData_Kdnr=null, VP3 Titel=null, VP1 Hausnummer=null, zahlweise=QUARTALSWEISE, VN Nachname=Mustermann, versandweg=EMAIL, VP3 Hausnummer=null, VP4 Ort=null, VP4 Anrede=null, VN Anrede=HERR, tuwid=null, VP2 Nachname=null, haustarif=N, VP2 Hausnummer=null, VP3 Strasse=null, VP2 Kdnr=null, iban=DE99999999, VP1 Nachname=null, VN Vorname=Max, VN baseData_Kdnr=null, VP2 Titel=null, vertriebskanal=TELEFON, VP2 Ort=null, VN Geburtsdatum=01.01.1980, VN Titel=null, VP1 Strasse=null, VP2 Strasse=null, VN Hausnummer=60, verkaufsproduktart=standart, quellsystem=system, VP3 Ort=null, rabattWert=0, VP4 Vorname=null, Testfallname=5, VP1 Anrede=null, VP2 Anrede=null, versicherungsBeginn=0, VN Strasse=street , VP2 Vorname=null, tarife=zzz, VP1 Kdnr=null, kundencm=J, verkaufsprozessart=DIREKTABSCHLUSS, VP1 Titel=null, gespraechspartner vorname=Hans, VP1 Postleitzahl=null, VP3 Anrede=null, kontoinhaber=Max Mustermann, userId=123456789, VN gleich VP=N, VN Ort=City, VP4 Strasse=null, gespraechspartner nachname=Meyer, versandmail=test@test.com, VP1 Ort=null, VP1 Geburtsdatum=null, VP2 Postleitzahl=null, VP4 Nachname=null, bankname=Bank, VP2 Geburtsdatum=null, VP3 Geburtsdatum=null, VP4 Postleitzahl=null, bic=NORSDE51XXX, VP3 Postleitzahl=null, VP4 Geburtsdatum=null}
【问题讨论】:
-
您能添加一下您的哈希图的样子吗?
-
您能否向我们展示您当前解决方案的Minimal, Reproducible Example,以便我们查看输入的样子?
-
使用当前映射器编辑。
-
请添加您打印的地图以便更好地理解
-
已添加。您可以在打印的地图中看到。我将一些字段命名为 baseData_*。这些值需要像上面的 json 一样放在一个名为 baseData 的子对象中