簡體   English   中英

需要有關如何將具有相同鍵的兩個值從 json 格式解析為 java map 的建議

[英]need suggestions about how to parse two values with same key from json format into java map

我正在將 LDAP 中的 ldif 屬性讀取到我的 java 程序中,我最初的想法是將這些屬性放入 map 中,然后從那里解析它們,其中包含我調用的“departmentNumber”屬性,兩個 json 格式值,

departmentNumber: {"sid":"729999","uid":501,"name":"tebase","role":"managers","title":"sales","groups":["others"]}
departmentNumber: {"sid":"724605","uid":37,"name":"tebase","role":"managers","title":"develope","groups":["leaders"]}

所以我用 map 來放它們,一些代碼如下所示,

但我的方法只能檢索第一個 json 值,即包含 {"sid":"729999"} 的值,但沒有包含 {"sid":"724605"} 的第二個值,

我觀察到程序日志是:

這是從 ldif 屬性讀取的日志

2019 22:30:58,237 authentication.mzauth   authentication.mzauth.doAuthenticate(mzauth.java:44)  
{"uid":"brucelee","mail":"brucelee@gm.macom","displayName":"Bruce Lee","givenName":"Bruce Lee","departmentNumber":"{\"sid\":\"729999\",\"uid\":501,\"name\":\"teabas\",\"role\":\"managers\",\"title\":\"sales\",\"groups\":[\"others\"]}","objectClass":"inetOrgPerson","description":"Bruce Lee","sn":"Bruce Lee","cn":"Z39414","department":"000000","info":"2006/02/12"}   

這是放入 map 並解析出來的日志

2019 22:30:58,247 services.LdapService services.LdapService.getUser(LdapService.java:251)
ldap user:{"username":"brucelee","fullname":"Bruce Lee","email":"brucelee@gm.macom","departmentid":"729999","titles":[{"schoolid":"729999","titles":["managers","sales"]}],"cloudroles":{"usage":"clouddev","roles":[{"appname":"mail","departmentid":"729999","titles":["managers","sales"]}]},"guid":"c00d5ba660145307c84f2c1e1c557e4ededaf1830029d40aa5b244027","pid":"Z39414","openid":"http://openid.macom/brucelee"}  

如您所見,只有 1 個值,即 sid:72999,而不是兩個值,

原來的 ldif 屬性是:

帶有 scope 子樹過濾器的 LDAPv3 基礎:uid=brucelee 請求:ALL

Z39414, Managers, developer.alle.com dn: cn=Z39414,ou=Managers,dc=developer,dc=alle,dc=com uid: brucelee userPassword: qwdmsdierf mail: brucelee@gm.macom info: 2006/02/12 sn:李小龍部門編號:{"sid":"729999","uid":501,"name":"tebase","role":"managers","title":"sales","groups":[ "其他"]} 部門編號:{"sid":"724605","uid":37,"name":"tebase","role":"managers","title":"develope","groups": [“leaders”]} 部門:000000 givenName:李小龍 objectClass:inetOrgPerson objectClass:organizationalPerson objectClass:person objectClass:top cn:Z39414 displayName:李小龍描述:李小龍

搜索結果 search: 2 result: 0 Success numResponses: 2 numEntries: 1

我的問題是,如何將兩個 json 值放入我的 map,或者我對 map 的使用是錯誤的,有更好的方法來處理這種情況?

public DataModel getUser(String uid, String passwd, String role, DataModel   user) throws Exception {
private Map<String, String> map = null;
   if (role.equals("managers")) {
            map = Ldap.getAttrubites(ldapurl, uid, passwd);
            List<Titles> titlesArray = new ArrayList<>();
            List<Roles> rolesArray = new ArrayList();
            map.forEach((key, value)
                    -> {logger.info("{} - {}", key, value); });
     if (key.equals("departmentNumber")) {
                List<StringModel> model = map.get("departmentNumber")).get();
                model.stream().forEach(k -> {
                for (int i = 0; i < model.size(); i++) {
                            Titles titles = new Titles();
                            List<String> titleList = new ArrayList<>();
                            String userid = model.get(i).getUid();
                            String mtitle = model.get(i).getRole();
                            String subtitle = model.get(i).getTitle();
                            titleList.add(mtitle);
                            titleList.add(subtitle);
                            titles.setSchoolid(schoolid);
                            titles.setTitles(titleList);
                            titlesArray.add(titles);

                 ........ });}
                 user.setTitles(titlesArray);
                 .........;
    } return user;
    }

java.util.Map<K,V>接口為每個鍵只保存一個值。 如果要為每個鍵保存多個值,則需要為V部分指定一個集合 class。 例如,像下面這樣。

Map<String, List<String>> map = ...

Java EE API 中定義的javax.ws.rs.core.MultivaluedMap接口是實現您想要做的事情的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM