首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从HashMap<String、String>创建多维json

从HashMap<String、String>创建多维json
EN

Stack Overflow用户
提问于 2021-07-14 21:47:55
回答 2查看 54关注 0票数 0

我需要从一个hashmap创建一个多维json,我必须从一个.csv文件生成它。csv中的Hashmap映射运行良好。如果我用一个简单的Hashmap转换创建的ObjectMapper,我只得到一个单维json,其中包含HastMap的所有属性。

是否可以检查Hashmapkeys,如果键以"baseData“开头,它就会进入子对象baseData,如下面的json所示。

代码语言:javascript
复制
    {
    "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"
                }]
         }
}

testCaseDatabaseData这样的对象名称是固定的和已知的。例如,baseData中的其余数据需要是通用的(这就是我使用hashmap的原因)。

感谢你的帮助

编辑:

当前映射器

代码语言:javascript
复制
    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}
EN

回答 2

Stack Overflow用户

发布于 2021-07-14 22:41:46

如果您正确地构建了哈希图,objectMapper就可以完成这项工作。如果您正确地构建了hashmap,那么它就不可能给出“一维”JSON。

检查您的hashmap是否构造正确,就像给出JSON结果一样。

因此,从您添加的详细信息来看,您似乎只为baseData构建了哈希图。这就是为什么你会得到一个“一维”的JSON。

票数 0
EN

Stack Overflow用户

发布于 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");,如上例所示。

这样就可以了。以防有人在搜索它:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68379314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档