程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从 HashMap<String, String> 创建多维 json大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从 HashMap<String, String> 创建多维 json?

开发过程中遇到从 HashMap<String, String> 创建多维 json的问题如何解决?下面主要结合日常开发的经验,给出你关于从 HashMap<String, String> 创建多维 json的解决方法建议,希望对你解决从 HashMap<String, String> 创建多维 json有所启发或帮助;

我需要从 Json 创建一个多维 hashmap,我必须从 .csv 文件生成它。 来自 csv 的 Hashmap 映射工作正常。 如果我使用简单Hashmap 转换创建的 ObjectMapper,我只会得到一个具有 Json 的所有属性的单一维度 HastMap

是否可以检查 keysHashmap,如果键以“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"
                }]
         }
}

TESTCaseDatabaseData 这样的对象名称是固定且已知的。例如,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}

解决方法

如果您正确构建了哈希图,objectMapper 将完成这项工作。 如果您正确构建了哈希图,它就不可能为您提供“一维”JSON。

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

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

,

好的,我找到了一种方法:

首先你需要像这样设置两个(或者你需要多少个子对象)Hashmaps:

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"); 就像上面的例子一样。

那就行了。以防万一有人在搜索它:-)

大佬总结

以上是大佬教程为你收集整理的从 HashMap<String, String> 创建多维 json全部内容,希望文章能够帮你解决从 HashMap<String, String> 创建多维 json所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。