我需要从一个hashmap创建一个多维json,我必须从一个.csv文件生成它。csv中的Hashmap映射运行良好。如果我用一个简单的Hashmap转换创建的ObjectMapper,我只得到一个单维json,其中包含HastMap的所有属性。
是否可以检查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}发布于 2021-07-14 22:41:46
如果您正确地构建了哈希图,objectMapper就可以完成这项工作。如果您正确地构建了hashmap,那么它就不可能给出“一维”JSON。
检查您的hashmap是否构造正确,就像给出JSON结果一样。
因此,从您添加的详细信息来看,您似乎只为baseData构建了哈希图。这就是为什么你会得到一个“一维”的JSON。
发布于 2021-07-15 16:59:52
好吧,我找到了一种方法:
首先,您需要设置两个(或需要多少个子对象)Hashmap,如下所示:
HashMap<String, Object> testCaseData = new HashMap<String, Object>();
最内部的Hashmap可以是:
HashMap<String, String> baseData = new HashMap<String, String>();
然后,您需要通过填充任何需要的字段,从内部Hashmap到外部。
baseData.put("verkaufsproduktart", "SZSSZL"); baseData.put("tarifgeneration", null);
然后将内部Hashmap映射到外部Hashmap
testCaseData.put("baseData", baseData);
然后,您需要做的就是创建一个Mapper实例
ObjectWriter Obj = new ObjectMapper().enable(SerializationFeature.WRAP_ROOT_VALUE).writer().withRootName("testCaseData"); String jsonStr = Obj.writeValueAsString(testCaseData); System.out.println(jsonStr)
默认情况下,根值是"Hashmap“。如果要将其重命名为所需的名称,则需要添加:
.writer().withRootName("testCaseData");,如上例所示。
这样就可以了。以防有人在搜索它:-)
https://stackoverflow.com/questions/68379314
复制相似问题