java生成三级json对象_java三级分类条件查找返回的json格式数据-程序员宅基地

技术标签: Java  

  在网页中我们经常会用到三级联动下拉菜单,而从后台获得的数据一般是json格式的,故需要返回三级json对象,另外有一些特殊情况也需要用到三级的json来实现。

1、文件Node1.java,定义Node1对象:

package com.soecode.hbdw.powstation.node;

import java.util.List;

public class Node1 {
	private String name;
	private List<Node2> cName;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<Node2> getcName() {
		return cName;
	}
	public void setcName(List<Node2> cName) {
		this.cName = cName;
	}
	
}


2、文件Node2.java,定义Node2对象:

package com.soecode.hbdw.powstation.node;

import java.util.List;

public class Node2 {
	private String name;
	private List<String> cName;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<String> getcName() {
		return cName;
	}
	public void setcName(List<String> cName) {
		this.cName = cName;
	}
	
}


3、转换代码:

//显示所有
	@ResponseBody
	@RequestMapping(value = "/queryAll")
	private List<Node1> getlist(Model model) {
		List<PowStation> powStations=powStationService.getList();
		int i,j,k;
		//flag1和flag2用以标志对象存在与否,存在为false,否则为true
		Boolean flag1,flag2;
		List<Node1> nodes=new ArrayList<Node1>();
		for(i=0;i<powStations.size();i++){
			PowStation powstation=powStations.get(i);
			String string1=powstation.getSubunit();
			String string2=powstation.getName();
			String string3=powstation.getNum();
			flag1=true;
			flag2=true;
			if (string1!=null) {
				Node1 node1=new Node1();
				Node2 node2=new Node2();
				List<String> list1=new ArrayList<String>();
				List<Node2> list2=new ArrayList<Node2>();
				for(j=0;j<nodes.size();j++){
					if (string1.equals(nodes.get(j).getName())) {
						flag1=false;
						//break;
						for(k=0;k<nodes.get(j).getcName().size();k++){
							if (string2.equals(nodes.get(j).getcName().get(k).getName())) {
								//设置node2结点,并添加node2结点到node1
								node2.setName(string2);
								list1=nodes.get(j).getcName().get(k).getcName();
								list1.add(string3);
								node2.setcName(list1);
								//设置node1结点,并添加node2结点到nodes
								node1.setName(string1);
								list2=nodes.get(j).getcName();
								list2.set(k, node2);
								node1.setcName(list2);
								nodes.set(j, node1);
								flag2=false;
								break;
							}
						}
						if (flag2) {
							//设置node2结点,并添加node2结点到node1
							node2.setName(string2);
							//list1=node2.getcName();
							list1.add(string3);
							node2.setcName(list1);
							//设置node1结点,并添加node2结点到nodes
							node1.setName(string1);
							list2=nodes.get(j).getcName();
							list2.add(node2);
							node1.setcName(list2);	
							nodes.set(j, node1);
							
						}
					} 
				}
				if(flag1){
					//设置node2结点,并添加node2结点到node1
					node2.setName(string2);
					list1.add(string3);
					node2.setcName(list1);
					//设置node1结点,并添加node2结点到nodes
					node1.setName(string1);
					list2.add(node2);
					node1.setcName(list2);					
					nodes.add(node1);
				}
			}	
		}
		return nodes;
	}


  java对象实际以树的结构存储,以多级列表List和自定义javaBean相结合来实现树的存储,并通过@Responsebody注解来实现将返回值自动转化为三级json的对象。

  其中@RequestMapping(value = "/queryAll")是用来实现页面地址映射的,在这里可以不用管它。

  powStations是一个List列表对象,PowStation是一个pojo,包括id和表单的三级元素,第一级subunit,第二级name,第三级num。

  另外,需要注意第一个if判断,string1获取的对象是通过PowStation从数据库中获取的,当对象为null时,不能用equals()和matchs()判断,因为string1对象相当于未初始化,没有目标。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jnx1142410525/article/details/55521567

智能推荐

探索性测试01-什么是探索性测试-程序员宅基地

文章浏览阅读8.2k次,点赞5次,收藏56次。一、什么是探索性测试探索式测试,最早是由测试专家 Cem Kaner 博士在 1983 年提出的,并受到当时语境驱动的软件测试学派的支持。后来,Cem Kaner 博士在佛罗里达工学院的同事 James A. Whittaker,凭借着在微软和谷歌担任测试架构师和测试总监的经验积累,撰写了最早的探索式测试书籍(Exploratory Software Testing),扩展了探索式测试的概念和方法。常用于质量管理的戴明环(PDCA)是按照Plan(计划)、Do(执行)、Check(检查)和Act(处_探索性测试

table嵌套table-程序员宅基地

文章浏览阅读5.3k次。以下由驾驶员填写 住址 住址2 联系电话 ..._table嵌套table

poi cell转成对应的字符_cell.getnumericcellvalue() 怎么转换为string-程序员宅基地

文章浏览阅读2.2k次。package utils;import org.apache.commons.lang.StringUtils;import org.apache.poi.hssf.usermodel.HSSFDateUtil;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellType;im..._cell.getnumericcellvalue() 怎么转换为string

跳转到三方App ,三方App 是如何返回自己的App的_app里插了一个外部的插件,我要怎么跳回自己的app啊?-程序员宅基地

文章浏览阅读1.9k次。我们接入一些三方sdk 微信,京东,淘宝的时候会发现,打开了三方的app后,对方有个返回商家或者返回app 的功能,这个是怎么实现的呢,这里先用微信来说接入微信支付的都知道,集成微信支付时必须在我们的包名下创建wxapi文件夹里面有一个WXPayEntryActivity。启动Activity 的方式大家不陌生,通过intent有显示启动和隐示启动两种微信sdk 要求开发者建立固定的wxapi.WXPayEntryActivity,很明显微信这里用的是显示启动的方式,通过如下代码可以启动对应的a_app里插了一个外部的插件,我要怎么跳回自己的app啊?

(Java毕业设计)图书馆书库管理系统(基于SSM框架)附源码_基于ssm框架java图书管理设计zip文件-程序员宅基地

文章浏览阅读520次。如今生活节奏也是不断加快,越来越多的喜欢看书的人选择通过网上在线租赁图书方式租赁图书,为了更好的方便消费者和图书馆管理人员,结合目前流行的在线经营理念,让每一本图书能够让更多的读者阅读。该系统前端使用JQuery框架对DOM操作,后端代码使用Java语言编写的,高效快速。数据库管理系统使用开源软件MYSQL,节约成本。该网站页面简洁,能够让浏览网站的用户快速查询到自己想要获得的信息,并做出相应的处理。_基于ssm框架java图书管理设计zip文件

intellij idea tomcat 控制台日志乱码_idea +tomcat控制台乱码-程序员宅基地

文章浏览阅读5.7k次。只需要找到idea的然后打开问价增加:-Dfile.encoding=UTF-8 然后重启intellij idea 就行但是这个问题好了之后又出现了一个问题 那就是System.out.println("测试进入");这个在控制台输出的时候会乱码于是在idea 里 打开Tomcat 配置 在VM options 加入 -Dfile.encoding=..._idea +tomcat控制台乱码

随便推点

23个Python实战项目源码(可接私活)_python 软件 实例-程序员宅基地

文章浏览阅读1k次,点赞27次,收藏24次。① Python所有方向的学习路线图,清楚各个方向要学什么东西② 600多节Python课程视频,涵盖必备基础、爬虫和数据分析③ 100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论④ 20款主流手游迫解 爬虫手游逆行迫解教程包⑤ 爬虫与反爬虫攻防教程包,含15个大型网站迫解⑥ 爬虫APP逆向实战教程包,含45项绝密技术详解⑦ 超300本Python电子好书,从入门到高阶应有尽有⑧ 华为出品独家Python漫画教程,手机也能学习。_python 软件 实例

【深度学习框架】keras模型(VGG16,VGG19...)下载过慢问题_vgg16() downloading data-程序员宅基地

文章浏览阅读857次。问题:当你初次运行keras库时,需要下载,如VGG19,提示:Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg19_weights_tf_dim_ordering_tf_kernels_notop.h5并下载缓慢。解决方法:1.在浏览器打开VGG19下载地址2.下载完成后复制到.keras\models(C:\Users\Administrator._vgg16() downloading data

薅羊毛利器——青龙面板+ndjdc搭建脚本运行环境_青龙脚本 nvjdc-程序员宅基地

文章浏览阅读2.8k次。青龙面板+nvjdc青龙面板是一个国人开发的,自持脚本运行的工具。官网是这么描述的:支持python3、javaScript、shell、typescript 的定时任务管理面板。我们这里看中是它可以定时执行javaScript脚本,那么就可以挂载执行薅羊毛脚本nvjdc 是对青龙面板功能的延伸,它的主要功能是帮助我们使用验证码的方式来获取京东App的cookie并管理安装docker我这里是以一台Linux20.04的机器来示例,如果你的机器已经安装了docker,这一步可以跳过只需要一句命_青龙脚本 nvjdc

js 判断2个数组里面的重复项,并且判断一个数组是否包含另一个数组_判断两个数组其中-程序员宅基地

文章浏览阅读2.3k次。判断一个数组里面的每一项的值,是否包含另一个数组里面的每一项。我们只需要先定义一个新的数组来存储着2个数组里面值一样的。var arr1 = [ 1, 2, 3,4,5, 6 ,7];var arr2 = [1, 3 , 5 ];varitemAry = []然后拿 ar1 和 arr2 循环遍历,判断 得到新的数组itemAry最后 varflag =false; 判断 新数组的length 和 arr2数组的length 是否相等,如果相等 就 returnfl..._判断两个数组其中

android P OTA (MTK)初探 —— 2、基于块(Block)的OTA:Target 包的制作流程_target_files-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏10次。上文简单介绍了OTA的分类和流程,本文重点分析Target包。一、Target包结构:二、生成命令研究OTA会发现网上介绍比较多的命令是 make otapackage ,编译完成后,在根目录执行这个命令会生成Target包和完整升级包。其实有单独编译Target 包的命令:make target-files-packageandroid默认情况下,最终生成的Target包在此目录下:..._target_files

C语言:switch处理打折问题_c语言用switch冲150享受9折,冲200享受8折,显示卡的余额-程序员宅基地

文章浏览阅读468次,点赞10次,收藏10次。【代码】C语言:switch处理打折问题。_c语言用switch冲150享受9折,冲200享受8折,显示卡的余额

推荐文章

热门文章

相关标签