{"dingtalk_corp_role_list_response":{"result":{"has_more":"false","list":{"role_groups":[{"group_name":"默认","roles":{"roles":[{"id":278146611,"role_name":"主管理员"},{"id":278146612,"role_name":"子管理员"},{"id":278146613,"role_name":"负责人"},{"id":278146614,"role_name":"主管"}]}},{"group_name":"职务","roles":{"roles":[{"id":278146616,"role_name":"财务"},{"id":278146617,"role_name":"人事"},{"id":278146618,"role_name":"出纳"},{"id":278146619,"role_name":"销售"},{"id":278146620,"role_name":"客服"},{"id":278146621,"role_name":"质检"},{"id":278146622,"role_name":"研发"},{"id":278146623,"role_name":"行政"},{"id":278146624,"role_name":"设计"},{"id":278146625,"role_name":"产品"},{"id":278554778,"role_name":"采购"}]}},{"group_name":"岗位","roles":{"roles":[{"id":278146627,"role_name":"普通员工"},{"id":278146628,"role_name":"经理"},{"id":278146629,"role_name":"科长"},{"id":278146630,"role_name":"部长"},{"id":278146631,"role_name":"总监"},{"id":278146632,"role_name":"管理层"},{"id":278146633,"role_name":"高级管理者"},{"id":278146634,"role_name":"总经理"}]}}]}},"request_id":"7iythn3xigry"}}

  

调用接口返回的json如下

现在要得到的是roles的 role_name和id,具体方法如下,其实还是很简单的,只不过需要耐心点。

public static List<RoleGroup> getAllRoleList(String access_token,Long size,Long offsize) throws ApiException, OApiResultException{
DingTalkClient client = new DefaultDingTalkClient("https://eco.taobao.com/router/rest");
CorpRoleListRequest req = new CorpRoleListRequest();
List<RoleGroup> list = new ArrayList<>();
req.setSize(size);//分页大小
req.setOffset(offsize);//分页偏移
CorpRoleListResponse rsp = client.execute(req, access_token);
JSONObject response = JSON.parseObject(rsp.getBody());
if (response.containsKey("dingtalk_corp_role_list_response")) {
JSONObject j1 = response.getJSONObject("dingtalk_corp_role_list_response");
JSONObject j2 = j1.getJSONObject("result");
JSONObject j3 = j2.getJSONObject("list");
JSONArray j5 = j3.getJSONArray("role_groups");
for (int i = 0; i < j5.size(); i++) {
JSONObject j6 = j5.getJSONObject(i);
JSONObject j7 = j6.getJSONObject("roles");
JSONArray j8 = j7.getJSONArray("roles");
if(j8!=null){
for(int n = 0; n < j8.size(); n++){
RoleGroup g = j8.getObject(n, RoleGroup.class);
list.add(g);
}}
}
return list;
}
else {
throw new OApiResultException("Role");
}
}
package com.alibaba.dingtalk.openapi.demo.role;

public class RoleGroup {
private String id;
private String role_name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getRole_name() {
return role_name;
}
public void setRole_name(String role_name) {
this.role_name = role_name;
}
}

对复杂json进行处理的更多相关文章

  1. 使用TSQL查询和更新 JSON 数据

    JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...

  2. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  4. Taurus.MVC 2.2 开源发布:WebAPI 功能增强(请求跨域及Json转换)

    背景: 1:有用户反馈了关于跨域请求的问题. 2:有用户反馈了参数获取的问题. 3:JsonHelper的增强. 在综合上面的条件下,有了2.2版本的更新,也因此写了此文. 开源地址: https:/ ...

  5. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  6. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  7. JSON.parse()和JSON.stringify()

    1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ...

  8. json与JavaScript对象互换

    1,json字符串转化为JavaScript对象: 方法:JSON.parse(string) eg:var account = '{"name":"jaytan&quo ...

  9. .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

  10. WebApi接口 - 响应输出xml和json

    格式化数据这东西,主要看需要的运用场景,今天和大家分享的是webapi格式化数据,这里面的例子主要是输出json和xml的格式数据,测试用例很接近实际常用情况:希望大家喜欢,也希望各位多多扫码支持和点 ...

随机推荐

  1. js中的生成器函数

    入门 简单来说,用法如下: function* fn() { console.log(1); //暂停! yield; //调用next方法继续执行 console.log(2); } var ite ...

  2. __bridge

    Core Foundation 框架Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举 ...

  3. MySQL使用explain时各字段解释

    1.id select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 三种情况: (1)id相同,执行顺序由上至下 id相同,执行顺序由上至下 此例中 先执行where 后的 ...

  4. CentOS7.6中 KVM虚拟机内存、CPU调整

    CentOS7.6中 KVM虚拟机内存.CPU调整 一.调小虚拟机内存 调小虚拟机内存可以动态实现,不用关机 1.查看当前内存大小 [root@heyong kvm]# virsh dominfo t ...

  5. Spring基础19——Spring中几种注解的区别

    1.@Autowired:注解是用来装配bean的,需要注入的bean必须是已经被IOC容器创建的bean,这个注解是利用类型装配的,如果容器中出现一个以上要装配的类或其子类就需要用@Qualifie ...

  6. 关于jsp 获得当前绝对路径的方法

    方法1) request.getRequestURL(); 方法2)  request.getScheme()+"://"+request.getServerName()+&quo ...

  7. 03python面向对象编程之Python中单下划线和双下划线的区别7

    通常Python类中会有_和__的方法,是指什么意思呢?如下: 双下划线表示内部不允许访问,一个下划线表示这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽 ...

  8. 长沙理工大学第十二届ACM大赛-重现赛C 安卓图案解锁 (模拟)

    链接:https://ac.nowcoder.com/acm/contest/1/C来源:牛客网 安卓图案解锁 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言 ...

  9. Qt带参数的信号和槽

    在Qt的开发过程中,信号带参数是很常见的,在使用带参数的信号槽时,有以下几点需要注意. 当信号和槽函数的参数数量相同时,它们的参数类型要完全一致. 信号和槽函数的声明: signals: void i ...

  10. pymongo操作mongo数据库的查操作

    一:  数据结构 { "_id" : ObjectId("5de8a5b748a75a8d48b72bdc"), ", ", ", ...