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


相关推荐

  • 【奇葩bug】微信小程序:Unit8Array is not defined[通俗易懂]

    【奇葩bug】微信小程序:Unit8Array is not defined[通俗易懂]【奇葩bug】微信小程序:Unit8Arrayisnotdefined在用微信小程序里的蓝牙模块,要给设备写入信息。结果报错:VM22:2MiniProgramErrorUnit8ArrayisnotdefinedReferenceError:Unit8Arrayisnotdefined报错原因:正确拼写是Uint8Array…难怪根本搜不到相关问题,幻视误人啊。(完全没有技术含量的bug,也没有耽误太多时间,但实在是让我感到哭笑不得……另外,关于ArrayBuffer

    2025年11月19日
    7
  • mybatis-plus自动生成代码的调用用法(mybatisplus批量新增)

    一、介绍本教程将介绍如何使用mybatis-plus工具自动给我们生成Controller、Service、Entity、Mapper、Mapper.xml层代码要求:①生成的Controller类,需要继承BaseController②生成的Entity类,需要继承BaseEntity③生成的Service,默认名称下是以I开头的接口,在生成Se…

    2022年4月15日
    116
  • JS保留3位小数_保留一位小数表示精确到几位

    JS保留3位小数_保留一位小数表示精确到几位今天朋友面试,遇到一道面试题,写一个方法实现传入的参数数字保留三位小数//保留3位小数functionname(params){letnewpar=parseFloat(params);letreg=/^[0-9]+.?[0-9]*$/;if(reg.test(newpar)){letnewNum=newpar.toFixed(3);return…

    2025年6月18日
    1
  • 互联网医疗行业PEST分析实践「建议收藏」

    互联网医疗行业PEST分析实践「建议收藏」Python微信订餐小程序课程视频https://edu.csdn.net/course/detail/36074Python实战量化交易理财系统https://edu.csdn.net/course/detail/35475前言今年开始逐步切入产品与数据工作,完全脱离了原来的舒适区,确实有一些挑战。开始以为只做数仓建设的事情,就仓促的学习了一些数仓相关的知识,但没搞多久,还要负责公司BI的工作,又开始补习数分相关的知识。BI其实比数仓建设更有挑战性,数仓建设已经有非常成熟的体系了,市面上有很多

    2022年4月29日
    227
  • Jetson TX1开发笔记(二):TX1开发前必做的几件事

    Jetson TX1开发笔记(二):TX1开发前必做的几件事转载请注明作者和出处:http://blog.csdn.net/c406495762嵌入式平台:JestonTX1

    2022年6月23日
    25
  • 找不到指定的模块

    找不到指定的模块找不到指定的模块。(异常来自HRESULT:0x8007007E)

    2022年7月4日
    21

发表回复

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

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