嵌套对象转map

嵌套对象转map嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转mpa,有key就能得到相应的value。解决复杂json情况,尤其是当第三方json过于复杂时候很适合,如央行征信报告等。java代码://测试json,可以为一个Object对像Stringjson=”{\”success\”:0,\”errorMsg\”:\”错误消息\”,\…

大家好,又见面了,我是你们的朋友全栈君。

嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转map,有key就能得到相应的value。

解决复杂json情况,尤其是当第三方json过于复杂时候很适合,如央行征信报告等。
1.嵌套对象转map方法
该方法把嵌套对象转为单层map。

Map<String, Object> map = ObjectToMapUtils.trfMap(json, ".");

2.获取嵌套对象值

该方法不需要转为map,直接配置相关的key,获取对应的value。

//获取对象相应值,key中无数组情况
String condition = "[{\"key\": \"data.page.current\"}]";
List<SearchCondition> conditions = JSON.parseArray(condition, SearchCondition.class);
Object value = ObjectToMapUtils.getObjValue(json, conditions, null);
//输出 1
System.out.println(value);

//获取对象对应value值的数组
condition = "[{\"key\": \"data.rows.name\", \"value\":\"流程步骤名称\"}]";
conditions = JSON.parseArray(condition, SearchCondition.class);
Object obj = ObjectToMapUtils.getObjValue(json, conditions, null);
System.out.println(obj);

代码如下:

    //测试json,可以为一个Object对像
    String json = "{\"success\":0,\"errorMsg\":\"错误消息\",\"data\":{\"total\":\"总记录数\",\"page\":{\"size\":10,\"current\":1},\"rows\":[{\"id\":\"任务ID\",\"workName\":\"任务名称\",\"assigneeName\":\"经办人姓名\",\"name\":\"流程步骤名称\",\"processInstanceInitiatorName\":\"发起人\",\"processInstanceStartTime\":\"发起时间\",\"createTime\":\"到达时间\",\"dueDate\":\"截止时间\"},{\"id\":\"ID\",\"workName\":\"名称\",\"assigneeName\":\"经办人\",\"name\":\"流程\",\"processInstanceInitiatorName\":\"发起人\",\"processInstanceStartTime\":\"发起\",\"createTime\":\"到达\",\"dueDate\":\"截止\"}]}}";

    //转map,connector自定义,表示嵌套对象key与key的连接
    Map<String, Object> map = ObjectToMapUtils.trfMap(json, ".");

    //获取map值
    //输出 {data.page.current=1, data.page.size=10, data={"total":"总记录数","page":{"current":1,"size":10},"rows":[{"assigneeName":"经办人姓名","processInstanceStartTime":"发起时间","createTime":"到达时间","processInstanceInitiatorName":"发起人","dueDate":"截止时间","name":"流程步骤名称","id":"任务ID","workName":"任务名称"},{"assigneeName":"经办人","processInstanceStartTime":"发起","createTime":"到达","processInstanceInitiatorName":"发起人","dueDate":"截止","name":"流程","id":"ID","workName":"名称"}]}, success=0, data.total=总记录数, data.rows=[{"assigneeName":"经办人姓名","processInstanceStartTime":"发起时间","createTime":"到达时间","processInstanceInitiatorName":"发起人","dueDate":"截止时间","name":"流程步骤名称","id":"任务ID","workName":"任务名称"},{"assigneeName":"经办人","processInstanceStartTime":"发起","createTime":"到达","processInstanceInitiatorName":"发起人","dueDate":"截止","name":"流程","id":"ID","workName":"名称"}], errorMsg=错误消息}
    System.out.println(map);
     //输出 10
    System.out.println(map.get("data.page.size"));

    //获取对象相应值,key中无数组情况
    String condition = "[{\"key\": \"data.page.current\"}]";
    List<SearchCondition> conditions = JSON.parseArray(condition, SearchCondition.class);
    Object value = ObjectToMapUtils.getObjValue(json, conditions, null);
     //输出 1
    System.out.println(value);

    //获取对象对应value值的数组
    condition = "[{\"key\": \"data.rows.name\", \"value\":\"流程步骤名称\"}]";
    conditions = JSON.parseArray(condition, SearchCondition.class);
    Object obj = ObjectToMapUtils.getObjValue(json, conditions, null);
    System.out.println(obj);

    //获取对象对应value值的数组
    condition = "[{\"key\": \"data.rows.processInstanceInitiatorName\", \"value\":\"发起人\"}]";
    conditions = JSON.parseArray(condition, SearchCondition.class);
    obj = ObjectToMapUtils.getObjValue(json, conditions, null);
    System.out.println(obj);

    map = ObjectToMapUtils.trfMap(json, "-");
    System.out.println(map);
    System.out.println(map.get("data-page-size"));

详细使用见demo第4点。
demo地址:https://github.com/13162576590/fastjson_demo

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145287.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月17日 下午6:40
下一篇 2022年5月17日 下午6:40


相关推荐

  • Java中StringBuilder的清空方法比較

    Java中StringBuilder的清空方法比較

    2021年12月6日
    52
  • Linux chmod命令及权限含义

    Linux chmod命令及权限含义

    2021年10月15日
    57
  • 单元测试与集成测试

    单元测试与集成测试软件测试分类按测试用例的设计方法 软件测试分为白盒测试和黑盒测试 按测试策略和过程 软件测试分为单元测试 集成测试 确认测试和系统测试 按软件系统工程 测试是软件质量保证的最后的一关 高质量的程序取决于以下几个方面 高质量的设计 规范的编码 有效的测试开发部的测试效果不好 为什么 没有时间测试 不知道怎样测试 不好组织 缺乏方法和工具这种情况下

    2026年3月20日
    1
  • OpenProcessToken令牌函数用法「建议收藏」

    OpenProcessToken令牌函数用法「建议收藏」>GetCurrentProcessID得到当前进程的IDOpenProcessToken得到进程的令牌句柄LookupPrivilegeValue查询进程的权限AdjustTokenPrivileges调整令牌权限要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Admin

    2022年6月25日
    25
  • RIDE元素定位

    RIDE元素定位name 方式 name wd 不要引号 id 方式 id kw 不要引号 xpath 绝对路径 Xpath html body div 1 div 4 div 2 div form span 1 input 不推荐 一旦路径稍做改动 就会报错相对路径 xpath id su xpath id su

    2026年3月17日
    2
  • MySQL数据库基本命令

    MySQL数据库基本命令MySQL 数据库基本命令一 概述数据库结构常用数据类型二 查看数据库结构查看当前服务器中的数据库查看数据库中包含的表查看表的结构 字段 三 SQL 语句介绍四 创建及删除数据库和表 DDL 创建新的数据库创建新的表删除指定数据表删除指定的数据库五 管理表中数据记录 DML 向数据表中插入新的数据记录查询数据记录修改 更新数据表中的数据记录在数据表中删除指定的数据记录六 修改表名和表结构修改表名扩展表结构 增加字段 修改字段 列 名 添加唯一键删除字段扩展七 数据表高级操作克隆表 将数据表的数据记录生成到新的表

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号