{"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. hdu6468 zyb的面试 (思维)

    题目传送门 题意: 将1~n个数按字典序排序后,求第k个数 思路: 代码: #include<stdio.h> #include<iostream> #include<a ...

  2. HDU 1594 find the max

    数序问题. 题意是说 一个数列 a1,a2,--ai,--an;  x=i , y = ai:找两个点斜率绝对值.!最大. 第一次没找绝对值,--认真读题. .. x 每次加1 . 仅仅须要找 相邻的 ...

  3. Lock和synchronized的区别和使用(转发)

    今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不 ...

  4. 在Python中使用protobuf2.6.1 string format utf-8 and unicode error

    版本信息: protobuf: v2.6.1 python: 2.7 关于在Python中使用protobuf时 string格式字段的编码问题 在python中编码格式多采用utf-8格式.而pro ...

  5. HTML文本格式化标签(Formatting)

    <b>粗体文本</b> <code>计算机代码</code> <em>强调文本</em> <i>斜体文本</i ...

  6. fastadmin 搭建到云虚拟主机

    1.把public下的index.php.router.php.install.php.admin_*******.php..htaccess(伪静态文件),移到  文件夹:/htdocs   根目录 ...

  7. MyBatis源码浅析

    什么是MyBatis MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集.MyBatis 使用简单的 ...

  8. ocvate常用函数

    1.生成矩阵相关 https://www.coursera.org/learn/machine-learning/lecture/9fHfl/basic-operations 1. 初始化矩阵 a = ...

  9. uboot if_changed函数

    u-boot编译过程分析 u-boot.lds: $(LDSCRIPT) prepare FORCE $(call if_changed_dep,cpp_lds) u-boot: $(u-boot-i ...

  10. java并发学习--第十章 java内存模型的内存语义

    一.锁的内存语义 所为的java内存模型的内存语义指的就是在JVM中的实现原则. 锁的内存语义:锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息. 我们把上面这句话再整理下: ...