首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要建议如何用相同的键将两个值从json格式解析为java map。

需要建议如何用相同的键将两个值从json格式解析为java map。
EN

Stack Overflow用户
提问于 2019-10-04 15:13:06
回答 1查看 62关注 0票数 0

我正在将LDAP中的ldif属性读取到我的java程序中,我最初的想法是将这些属性放到一个映射中,然后从映射中解析它们,但是我发现有一个名为"departmentNumber“的属性,其中包含两个json格式值,

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

所以我用地图把它们放在下面的一些代码中,

但是我的方法只能检索第一个json值,它包含{"sid":"729999"},但是没有包含{"sid":"724605"}的第二个值,

我观察到的程序日志是:

这是从ldif属性读取的日志。

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

这是将其放入映射并解析出来的日志。

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

正如你所看到的,只有一个值,一个是sid:72999,而不是两个值,

最初的ldif属性是:

带作用域子树筛选器的LDAPv3基: uid=brucelee请求: ALL Z39414,developer.alle.com dn: cn=Z39414,ou=Managers,dc=developer,dc=alle,dc=com uid: brucelee userPassword: qwdmsdierf邮件: brucelee@gm.macom info: 2006/02/12 sn:李小龙departmentNumber:{"sid":"729999","uid":501,“名称”:“tebase”,“角色”:“经理”,“标题”:“销售”,“组”:“其他”}departmentNumber:{"sid":"724605","uid":37,“名称”:“tebase”,“角色”:“经理”,“标题”:“发展”,“团队”:“领导者”}部门: 000000 givenName:李小龙objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: Z39414 displayName: Z39414 displayName: Bruce Lee搜索结果搜索:2结果:0成功numResponses: 2 numEntries: 1

我的问题是,我如何将两个json值都放进我的映射中,或者我对map的使用是错误的,并且有一个更好的方法来处理这种情况?

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

回答 1

Stack Overflow用户

发布于 2019-10-07 23:54:31

java.util.Map<K,V>接口只保存每个键的一个值。如果要为每个键保存多个值,则需要为V部件指定一个集合类。例如,如下所示。

代码语言:javascript
运行
复制
Map<String, List<String>> map = ...

Java中定义的javax.ws.rs.core.MultivaluedMap接口是一个实现您想要做的事情的示例。

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

https://stackoverflow.com/questions/58239094

复制
相关文章

相似问题

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