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


相关推荐

  • stringbuffer和stringbuilder是什么_Java编程

    stringbuffer和stringbuilder是什么_Java编程字符串常量池什么是字符串常量池?JVM为了减少字符串对象的重复创建,其维护了一块特殊的内存,这段内存被称为字符串常量池(存储在方法区中)。具体实现当代码中出现字符串时,JVM首先会对其进行检查。如果字符串常量池中存在相同内容的字符串对象,则将这个对象的地址返回。如果字符串常量池中不存在相同内容的字符串对象,则创建一个新的字符串对象并放入常量池。newString(“str…

    2025年11月21日
    5
  • 整数补码加减法运算法则是什么_补码加减法中

    整数补码加减法运算法则是什么_补码加减法中整数的补码计算正数的补码计算:与原码相同负数的补码计算:①先求出负数的原码,如-4的原码为10000100②通过原码求出反码,负数的反码就是:除符号位以外,其他位全部取反,如-4的反码为11111011③负数的补码等于负数的反码末位+1,如-4的补码为11111100特例:约定-128的补码为10000000注:若已知补码求原码:正数也是它本身,负数的求法同上,即对补码除符号位外取反,末位加1,就得到原码整数补码加减运算加法[A+B]补=[A]补+[B]补减法[

    2022年9月22日
    3
  • 2021python激活码破解方法

    2021python激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    58
  • spss之单因素方差分析因子不显示_无重复单因素方差分析

    spss之单因素方差分析因子不显示_无重复单因素方差分析方差分析方差分析又称F检验,在实际应用中常常需要对多个整体的均值进行比较,并分析他们之间是否存在差异,差异是否显著,这个时候我们就需要使用方差分析。方差分析用于研究自变量和因变量之间是否有关系及其关系强度的一种分析方法。其实质是将所有测量值之间方差分析的三个概念1.因素:2….

    2022年9月25日
    2
  • android 自己定义通知栏遇到的问题「建议收藏」

    android 自己定义通知栏遇到的问题

    2022年1月21日
    45
  • MFC 键盘钩子「建议收藏」

    MFC 键盘钩子「建议收藏」一、前言一日,看见我妈正在用电脑练习打字,频频低头看键盘,我想:要是键盘能发音的话,不就可以方便她养成”盲打”的好习惯吗?光想不做可不行,开始行动(您可千万别急着去拿工具箱啊^_^)…按键能发音,其关键就是让程序能够知道当前键盘上是哪个键被按下,并播放相应的声音,自己的程序当然不在话下,那么其它程序当前按下哪个键如何得知呢?利用键盘钩子便可以很好地解决。下载本文的全部源代码大

    2022年6月7日
    56

发表回复

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

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