嵌套对象转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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 多行注释快捷键_jsp注释快捷键

    多行注释快捷键_jsp注释快捷键1、Pycharm同时编辑多行:alt+shift+ctral+鼠标左键2、Pycharm同时多行注释:多行选中后ctrl+\

    2022年8月28日
    5
  • networkx教程

    networkx教程创建一个图创建一个没有节点和边的空图 importnetwor nx Graph 根据定义 a nbsp Graph 是节点 顶点 的集合以及确定的节点对 称为边 链接等 在 NetworkX 中 节点可以是任何可哈希对象 例如文本字符串 图像 XML 对象 另一个 Graph 自定义节点对象等 节点该图 G 可以以几种方式生长 NetworkX 包含许多图形生成器功能和设施 以多种格式读取和写

    2025年8月30日
    3
  • 基于大数据的舆情分析_舆情与大数据

    基于大数据的舆情分析_舆情与大数据数据工厂,是一套多组件化数据清洗加工及数据存储管理平台,同时能够管理所有的数据库的备份方案。支持多数据源类型的数据同步实现和数据仓库其他的数据源互通。对接收数据进行解压,对外提供压缩后的数据。

    2022年9月20日
    2
  • TypeLoadException: 找不到 Windows 运行时类型“Windows.UI.Xaml.Controls.Binding

    TypeLoadException: 找不到 Windows 运行时类型“Windows.UI.Xaml.Controls.Binding

    2021年9月9日
    56
  • 慧荣SM2246XT主控的固态硬盘修复开卡不识别怎么短接方法

    慧荣SM2246XT主控的固态硬盘修复开卡不识别怎么短接方法一块坏了的240G的固态硬盘,电脑完全不认盘了,所以想修复一下,拆开看到主控是慧荣的SM2246XT,幸好此主控是有开卡软件的,下载也比较方便,最新的SM2246XT_MP_EnhancePageMode_MPQ1102A_DBQ0412_FWR1212A.rar修复成功率很高,但跟U盘量产不同,固态硬盘开卡是需要短接的,但很多人不知道SM2246XT的固态硬盘该怎么短接,这里就教大家。如图拆开ssd外壳后可以看到板子上有ROMMODE的字样,那里就是短接的位置了,这里的4个短接点,我们是需要用镊子两两短

    2022年6月14日
    188
  • Java集合中对象排序

    Java集合中对象排序

    2022年1月26日
    43

发表回复

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

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