用List构建带有层次结构的json数据

Jaspersoft Studio使用json数据创建table与list ((net.sf.jasperreports.engine.data.JsonDataSource) $P{REPORT_DATA_SOURCE}).subDataSource("源数据数组名称")((net.sf.jasperreports.engine.data.JsonDataSource) $P{REPORT_DATA_SOURCE}).subDataSource("源数据数组名称")创建成功后左侧Fields会显示表格数据,绘制标题内容在Table中修改新建合并等。"cutn": "王小帅", 阅读详情

    在我的上一篇文章中讲述了如何以Oracle数据表和递归子查询构建多叉树以及如何查询(地址为 http://blog.youkuaiyun.com/hellowordapi/article/details/75763432), 但是在我们查询出来后要把逻辑上抽象的树转换成带有层级数据的json结构,这样才能够在前端插件如Ztree或自己写的左侧栏中渲染完成业务需求。 下面是把数据库中的数据转成带有层次结构的代码。

  需要引入的jar包maven地址为(也可以不引用只是博主喜欢了用Guava):

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>18.0</version>
        </dependency>
如果不引入瓜娃,只需要把Lists.newArrayList(); 改为jdk实例化List的方式即可。


实体类:

import com.google.common.collect.Lists;

import net.sf.json.JSONObject;

/**
 *  
 * @author zhoujie
 *
 */
public class SidebarTree {
      private String url;
      private String urlname;
      private String id;  //节点
      private String parent; //父节点
      private JSONObject attributes = new JSONObject();   //net.sf.json
      private List<SidebarTree> children= Lists.newArrayList(); //存放子节点
     //get set 
}


核心类:

public class TreeTest {
	public static List<SidebarTree> formatTree(List<SidebarTree> list ){
		SidebarTree root=new SidebarTree();
		SidebarTree node=new SidebarTree();
		List<SidebarTree> treelist=Lists.newArrayList(); //拼凑好的Json数据
		List<SidebarTree> parentNodes=Lists.newArrayList(); // 存放所有父节点
		
	     if(list!=null && list.size()>0){
	             root=list.get(0); //第一个一定是根节点 0
	             
	           for(int i=1; i<list.size(); i++){
	        	   node=list.get(i);
	        	   if(node.getParent().equals(root.getId())){ //从跟节点开始遍历是不是子节点
	 
	        		   parentNodes.add(node);
	        		   root.getChildren().add(node);
	        	   
	        	   }else{ //获取root子节点的孩子节点
	        		    getChildrenNodes(parentNodes, node); 
	 
	        		    parentNodes.add(node);
	        	   }
	           }  
	     }
	     treelist.add(root);

	     return treelist;
	     
	     }
	
	private static void getChildrenNodes(List<SidebarTree> parentNodes , SidebarTree node){
		 for(int i=parentNodes.size()-1; i>=0; i--){
			  SidebarTree pnode=parentNodes.get(i);
			  
			  if(pnode.getId().equals(node.getParent())){
				  pnode.getChildren().add(node);
				  return;
			  }

			 
		 }
	}
}


最终json格式:

[
    {
        "url": "*",
        "urlname": "系统管理",
        "id": "1",
        "parent": "0",
        "attributes": {},
        "children": [
            {
                "url": "*",
                "urlname": "权限管理",
                "id": "2",
                "parent": "1",
                "attributes": {},
                "children": [
                    {
                        "url": "/permission/index",
                        "urlname": "权限列表",
                        "id": "4",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/addPermission.shtml",
                        "urlname": "权限添加",
                        "id": "6",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/deletePermissionById",
                        "urlname": "权限删除",
                        "id": "7",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/addPermission2Role",
                        "urlname": "权限分配",
                        "id": "13",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/permission/allocation",
                        "urlname": "权限分配2",
                        "id": "19",
                        "parent": "2",
                        "attributes": {},
                        "children": []
                    }
                ]
            },
            {
                "url": "*",
                "urlname": "用户管理",
                "id": "22",
                "parent": "1",
                "attributes": {},
                "children": [
                    {
                        "url": "/member/list.shtml",
                        "urlname": "用户列表",
                        "id": "8",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/online.shtml",
                        "urlname": "在线用户",
                        "id": "9",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/changeSessionStatus",
                        "urlname": "用户Session踢出",
                        "id": "10",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/forbidUserById",
                        "urlname": "用户激活or禁止",
                        "id": "11",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/member/deleteUserById",
                        "urlname": "用户删除",
                        "id": "12",
                        "parent": "22",
                        "attributes": {},
                        "children": []
                    }
                ]
            },
            {
                "url": "*",
                "urlname": "角色管理",
                "id": "23",
                "parent": "1",
                "attributes": {},
                "children": [
                    {
                        "url": "/role/clearRoleByUserIds",
                        "urlname": "用户角色分配清空",
                        "id": "14",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/addRole2User",
                        "urlname": "角色分配保存",
                        "id": "15",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/deleteRoleById.shtml",
                        "urlname": "角色列表删除",
                        "id": "16",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/addRole",
                        "urlname": "角色列表添加",
                        "id": "17",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "role/index",
                        "urlname": "角色列表",
                        "id": "18",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    },
                    {
                        "url": "/role/allocation",
                        "urlname": "角色分配",
                        "id": "20",
                        "parent": "23",
                        "attributes": {},
                        "children": []
                    }
                ]
            }
        ]
    }
]




[Unity][JSON][List][JSONUnity]多个角色的数据读取写入JSON数据 接着上一篇文章 继续 JSON 的存储,相关文章1 上一篇文章 讲的 是 一个 角色 存储 JSON 数据,读取写入。 本文讲的是 多个 角色  存储 JSON 数据,读取写入。 它支持List和List数组 由于Unity的 5.2以上版本 已经 支持 JSON ,也就是说 ,可以不用引入 外部 的 JSON.dll 库(LitJSON.dll),就可以 使用 unity 阅读详情

相关推荐

VS2019手动添加bits/stdc++.h全指南(附解决‘无法打开源文件‘错误)

本文详细介绍了在Visual Studio 2019中手动配置C++万能头文件bits/stdc++.h的完整方法,解决常见的'无法打开源文件'错误。通过分析GCC与MSVC编译器生态差异,提供了纯手动创建和MinGW移植两种可靠方案,并给出详细的步骤、常见错误排查及最佳实践建议,帮助开发者高效配置竞赛开发环境。

weixin_29011395的博客 549

List转为层级数据

jdk新特性将List转为层级数据 @Override public List<Entity> lTree() { List<Entity> entities = baseMapper.selectList(null); List<Entity> level1Menu = entities.stream().filter(Entity -> Entity.getParentCid() == 0 ).map((menu) -&g

眼泪落在琴弦的博客 1260

【EtherCAT实践篇一】TwinCAT 3安装、使用

FULL(XAE)安装包:包含了XAR的功能,并能进行多种语言的编程和硬件组态,通常安装在编程电脑上;XAR安装包:包含了ADS的功能,是实时运行环境,对 TwinCAT 模块进行加载、执行、管理、实时运行与调用,通常安装在PLC中;RM安装包:在装了高版本的TwinCAT 3后,发现PLC中的TwinCAT版本较低,就需要安装相应低版本的RM安装包切换版本使用(注:4024无法使用RM安装包切换到低于4022的版本,如4020/4018/4016版本。

JXES智能生态系统 5132

Json,List,Map的数据格式详解。

JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。 规则如下: 1、映射用冒号(“:)表示。名称:值 2、并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2 3、映射的集合(对象)用大括号(“{}”)表示。此格式对

hoonr的专栏 4万+

电源完整性之Cadence Sigrity Power DC_电热协同仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的是Cadence Sigrity 中的Power DC组件,来操作一下电热协同仿真,下面开始享受仿真的快乐吧: 第0步:仿真简介 电热协同仿真把电和热相互的影响考虑到了一起。因为电导率并不是固定不变的,而是和温度有关,随着温度的升高导电率会下降。同样电流流径电阻的时候会产生热量,此热量为焦耳热。因此为了获得准确的仿真信息,应考虑电与热的互相影响,进行电

刘小同学的博客 1万+

经典EMC案例-汽车车载电子行车记录仪显示屏EMC BCI整改案例

拿到这款汽车前装车载电子行车记录仪,小编首先在实验室还原客户描述的现象,确定现象符合客户的描述,再根据现象出现的对应频率做好记录,因为通常BCI FAIL的现象不局现于一个频率点,然后通过这些现象及频点,再结合产品的构造、线束,分析构思出大致解决方案。

jack_luo4913的博客 3738

常见的几种List、Map类型以及对象对应的Json格式

常见的几种List、Map类型以及对象对应的Json格式

Zhou_10的博客 7145

Carla-编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?

编译CarlaUE4提示HoloLens.Automation项目缺少Windows程序集?不妨看看这个!

DSK_981029的博客 2573

最常见的几种List、Map类型以及对象对应的Json格式

1.实体类: public class CourseInfo { //课程id private Integer courseId; //课程名称 private String courseName; //课程描述 private String courseDesc; //课程图片 private String image; public Integer getCourseId() { return course

爱吃鸡腿的明仔 2873

基于CPCC_S_TASK_LIST_MAINTAIN的工艺路线组件批量分配实战与避坑指南

本文详细解析了SAP PP模块中基于CPCC_S_TASK_LIST_MAINTAIN函数实现工艺路线组件批量分配的实战技巧与避坑指南。针对批量分配的核心挑战,提供了参数配置、BAPI协同使用、Excel导入等解决方案,并分享了大容量数据处理优化经验,帮助用户高效完成工艺路线组件分配任务。

weixin_33563728的博客 307

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

Json List数据递归转换成层级Json

Json List数据递归转换成层级Json数据

It_sharp的博客 2719

大唐杯5G考前冲刺篇(回顾全文重点必看)

大唐杯习题复习指南

nimo观察者 1万+

Vue处理后台返回List集合带有Object对象的数据

VueJSON数组,JSON对象,数组的区别 参考博客:JSON数组,JSON对象,数组的区别 在Vue接收到后台的List集合数据中含有对象想转成数据对象的形式(Array)如图一;而不是Object,如图二。虽然可以遍历 图一 ...

Youning_Yim的博客 2万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

json与对象互转:json转实体类、实体类转json、json转List、List转json

JSONObject obj = JSONObject.fromObject(buc);

云泽的博客 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java list对象转json_java中List对象转换为JSON对象

一、什么是JSONJSON 即 JavaScript Object Natation(Java对象表示法),它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。简而言之,JSON就是JavaScript交换数据的一种格式。例子如下:{"username":"coolcooldool","password":"1230","usertype":"superadmin"}{...

weixin_42300317的博客 8454

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Json转化带有List集合数据解决带有多余引号

Json转化带有List集合数据,如果要求该list数据转化后中括号外无双引号且无转移,这种只能在jsonObject.put(“jsonArray” , jsonArray), 如果是jsonObject.put(“jsonArray” , jsonArray…toString())就会多出双引号和那个转义 ...

weixin_42446445的博客 4942

JSON串转化为List

在Java变成中如何将一个标准的JSON字符串转化为对象集合。

weixin_43124422的博客 6268

list转json

Struts2中list转换为json jar包下载地址 所需jar包,如下图: 实现代码,这里以execute方法为例: @Override public String execute() throws Exception { //1.调用Service根据typecode获得数据字典对象list List&lt;BaseDict&gt; list = baseDictService...

天明的博客 6万+

MYSQL存储过程处理JSON中LIST数据

项目中某个需求变更,导致JSON数据格式的字段中包含的LIST数据中的某个KEY值,需要批量从double类型变更string类型。

qq_43559922的博客 1123

json格式的解析,list如何转换json格式

list转换成json,然后在js里获取:         基本格式:     controller里:            JSONObject json = new JSONObject(); json.put("data", weirFlowService.queryWeirFlow(null)); response.setCharacterEncoding("utf-8");

飞火龙在天的博客 4922

json转string转list转对象

1.对象转string String strign = JSONObject.toJSONString(T); 2.string转对象 T t = JSONObject.parseObject(pojo, T.tclass); 3.Lits转string String jsons = JSON.toJSONString(tList); 4.String 转list List&lt...

whatisthespring的博客 3341

JSON和list之间的转换

//list转换为json List list = new ArrayList(); String str=JSON.toJSON(list).toString(); //json转换为list List list = new ArrayList(); list = JSONObject.parseArray(jasonArray, Person.class);

weixin_45543508的博客 6720

JSON转对象、List

前后台交互一般使用json进行传值,前台传的json需要在后台转换成需要的对象。 如果手动转换就显得太不优雅,并且还麻烦,所以就要用到json转对象json转对象: 当前台传过来的值是一个Map时,我们首先需要把Map转成json字符串,然后在把json字符串转换成对象 1.map转json字符串 String jsonStr = JSON.toJSONString(myMap); 2.json字...

wanlin77的博客 4939

【.Net Core】通过Newtonsoft.Json将list转换为json字符串或是将json字符串转换为list

前言 在很多业务场景中会遇到将json字符串转换为list或是将list转换为json字符串,下面通过一个例子来描述一下, let‘'s go! 环境及组件 环境:.net core 组件:Newtonsoft.Json 组件安装 通过vs2019打开.net core项目,右击解决方案,找到“管理解决方案的Nuget程序包” 在搜索框中输入Newtonsoft.Json,找到第一个并点击安装 安装后会在依赖项中看到 将json字符串转换为list 以下代码是从一个j..

光影8号的专栏 5345

json转list,map,list<map>;list,map,list<map>转json

import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public clas...

普罗旺斯_浅笑的博客 8906
上一篇: Oracle树形表和递归查询
下一篇: 能够检测多种设备类型的Spring Mobile
zh_coder
博客等级 码龄12年 31粉丝 20原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值