package cn.info.platform.test;
import java.io.IOException;
import java.lang.String;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.omg.CORBA.PUBLIC_MEMBER;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests;
import cn.info.platform.dao.FaqDao;
import cn.info.platform.entity.Faq;
import cn.info.platform.entity.FaqType;
/**
* @author Rocky
*/
@ContextConfiguration("classpath:spring-*.xml")
public class FaqTest extends AbstractJUnit38SpringContextTests {
@Autowired
private FaqDao faqDao;
public void testGetByID() {
ArrayList<FaqType> faqTypeList = faqDao.faqTypeList();
String nodeTree = getNodeTree(faqTypeList, 0);
System.out.println(nodeTree);
String nodeTreeSql = getNodeTreeSql(0);
System.out.println(nodeTreeSql);
}
private String getNodeTreeSql(int fid){
StringBuffer nodeStr = new StringBuffer("{");
nodeStr = nodeTreeSql(nodeStr, 0);
nodeStr = nodeStr.deleteCharAt(nodeStr.length() - 1);
return nodeStr.toString();
}
private StringBuffer nodeTreeSql(StringBuffer nodeTreeStr, int fid){
ArrayList<FaqType> faqTypeList = faqDao.faqTypeByFid(fid);
int len = faqTypeList.size();
if(len > 0){
nodeTreeStr.append("\"children\":[");
for(int i = 0; i < len; i++){
nodeTreeStr.append("{\"name\":\"" + faqTypeList.get(i).getName() + "\",");
nodeTreeStr = nodeTreeSql(nodeTreeStr, faqTypeList.get(i).getId());
}
nodeTreeStr.deleteCharAt(nodeTreeStr.length() - 1);
nodeTreeStr.append("]},");
}else{
nodeTreeStr.deleteCharAt(nodeTreeStr.length() - 1);
nodeTreeStr.append("},");
}
return nodeTreeStr;
}
private String getNodeTree(ArrayList<FaqType> faqTypeList, int fid){
StringBuffer nodeStr = new StringBuffer("{");
nodeStr = nodeTree(nodeStr, 0, faqTypeList);
nodeStr = nodeStr.deleteCharAt(nodeStr.length() - 1);
return nodeStr.toString();
}
private StringBuffer nodeTree(StringBuffer nodeTreeStr, int fid, ArrayList<FaqType> faqTypeList){
Boolean hasChildren = false;
StringBuffer nodeTr = new StringBuffer();
for(int i = 0; i < faqTypeList.size(); i++){
if(faqTypeList.get(i).getFid() == fid){
nodeTr.append("{\"name\":\"" + faqTypeList.get(i).getName() + "\",");
nodeTr = nodeTree(nodeTr, faqTypeList.get(i).getId(), faqTypeList);
hasChildren = true;
}
}
if(hasChildren == false){
nodeTreeStr.deleteCharAt(nodeTreeStr.length() - 1);
nodeTreeStr.append("},");
}else{
nodeTr.deleteCharAt(nodeTr.length() - 1);
nodeTreeStr.append("\"children\":[").append(nodeTr).append("]},");
}
return nodeTreeStr;
}
}
Json2Tree
package cn.info.platform.test;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import cn.info.platform.entity.FaqType;
/**
* Json字符串工具类
*
* @author luojiang2
*
*/
public class Json2Tree {
/**
* 根据id,pid和树要显示的属性生成树的Json字符串
*
* @param <T>
* @param objs
* @param pidAttr
* @param idAttr
* @return
* @throws Exception
*/
public static <T> String treeJson(long pid , List<T> objs, StringBuilder builder, String pidAttr, String idAttr, String labelAttr) throws Exception {
if (objs.size() == 0){
return "{\"children\":[]}";
}
for(Iterator<T> iter = objs.iterator(); iter.hasNext();) {
T t = iter.next();
long id = getLong(t, idAttr);
long temp_pid = getLong(t, pidAttr);
String label = getValue(t, labelAttr);
if(pid == Long.MAX_VALUE){
break;
}
if(temp_pid == pid){
builder.append("{\"id\":\"").append(id).append("\",");
builder.append("\"name\":\"").append(label).append("\",");
if(isHasChildren(id, objs, pidAttr)) {
builder.append("\"children\":[");
treeJson(id, objs, builder, pidAttr, idAttr, labelAttr);
builder.append("]},");
}else{
builder.deleteCharAt(builder.length() - 1).append("},");
}
}
}
builder.deleteCharAt(builder.length() - 1);
return builder.toString();
}
/**
* 判断给定id节点是否有孩子节点
* @param <T>
* @param id
* @param objs
* @return
* @throws Exception
*/
private static <T> boolean isHasChildren(long id , List<T> objs, String pidAttr) throws Exception{
for(T t : objs){
long pid = getLong(t, pidAttr);
if(pid == id){
return true;
}
}
return false;
}
private static <T> long getLong(T t, String attrName) throws Exception {
Field field = t.getClass().getDeclaredField(attrName);
if (!field.isAccessible()) {
field.setAccessible(true);
}
Object value = field.get(t);
if (value == null){
return Long.MAX_VALUE;
}else{
return Long.parseLong(value.toString());
}
}
private static <T> String getValue(T t, String attrName) throws Exception {
Field field = t.getClass().getDeclaredField(attrName);
if (!field.isAccessible()) {
field.setAccessible(true);
}
Object value = field.get(t);
if (value == null){
return "\"\"";
}else{
return value.toString();
}
}
public static void main(String[] args) throws Exception {
List<FaqType> lists = new ArrayList<FaqType>();
FaqType a1 = new FaqType();
FaqType a2 = new FaqType();
FaqType a3 = new FaqType();
FaqType a4 = new FaqType();
FaqType a5 = new FaqType();
FaqType a6 = new FaqType();
a1.setFid(-1);
a1.setId(1);
a1.setName("a");
a2.setFid(1);
a2.setId(2);
a2.setName("b");
a3.setFid(1);
a3.setId(3);
a3.setName("c");
a4.setFid(2);
a4.setId(4);
a4.setName("d");
a5.setFid(3);
a5.setId(5);
a5.setName("e");
a6.setFid(5);
a6.setId(6);
a6.setName("f");
lists.add(a1);
lists.add(a2);
lists.add(a3);
lists.add(a4);
lists.add(a5);
lists.add(a6);
String results = treeJson( -1,lists, new StringBuilder(), "fid", "id", "name");
System.out.println(results);
}
}
分享到:
相关推荐
Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...
EXT框架,作为一个强大的前端组件库,提供了丰富的UI控件,其中包括树形组件(EXT树),它能够根据JSON数据生成交互式的树状结构。 EXT树是EXT JS库中的一个组件,用于展示层级关系的数据,比如目录结构、组织架构...
### Java遍历JSON树知识点详解 ...通过以上介绍,我们可以看到,在Java中遍历JSON树并不复杂,但确实需要理解JSON的基本结构以及所使用的库的具体用法。希望本文能帮助你更好地理解和掌握这一技能。
5. **注意事项**:XML和JSON的数据结构有所不同,XML支持更复杂的树状结构,而JSON则更偏向于扁平化的键值对。在转换过程中,可能会遇到数据丢失或不匹配的情况,因此在实际应用中,需要对XML和JSON的数据结构进行...
当一个JSON对象中存在嵌套的对象或数组时,就形成了树状结构。 遍历多级树状JSON的基本思路是使用递归算法。递归是一种函数或过程调用自身的技术,非常适合处理具有层级关系的问题。以下是一个简单的递归函数模板,...
总之,"java树状结构生成代码dtree"涉及的关键技术包括Java后端数据处理、JSP动态页面、JSON序列化、以及前端的dtree库的使用。通过熟练掌握这些技术,你可以有效地在Java应用中构建出动态、交互式的树形结构图。
标题“树状结构网络版”暗示我们关注的焦点是一种数据结构在网络环境中的应用,特别是树状结构在网络系统或软件中的实现。在这个上下文中,“树状结构”通常指的是数据组织的一种方式,它模仿自然界中的树,其中每个...
而树状结构是一种常见的数据表示方式,常用于展示层次关系的数据,如文件系统、组织架构等。在本场景中,我们将在JSP页面中通过Ajax实现树状结构的动态加载,提高用户体验。 首先,我们需要理解Ajax(Asynchronous ...
在"ztree实现AJAX树状结构-JAVA实现"的项目中,我们将关注如何利用ZTree的AJAX功能动态加载树节点,同时与Java后端进行数据交互。 首先,我们需要在HTML页面中引入ZTree的CSS和JS文件,并创建一个用于显示树的`<ul>...
XML是一种标记语言,以树状结构表示数据,其语法严格,易于阅读,但解析相对较慢。JSON则是一种轻量级的数据交换格式,基于JavaScript语法,数据结构直观,易于解析,且传输速度快。JavaBean作为Java中数据的载体,...
在Java开发中,将数据库表内容转换为树结构的JSON数据是常见的需求,尤其是在构建具有层级关系的数据展示,如组织架构、菜单系统等。本文将详细介绍如何使用Java根据数据库表内容生成树结构的JSON数据。 首先,我们...
下面我们将深入探讨如何在Java中创建这样的树状结构的JSON报文,以及可能涉及的相关技术。 首先,我们需要理解"children"属性在树状结构中的含义。在数据结构中,一个节点的"children"通常是指其下属的所有子节点。...
7. **JSON**:可能用于在客户端和服务器之间传输树状结构数据,因为JSON格式轻量且易于解析。 8. **Ajax**:异步JavaScript和XML,用于实现无刷新的数据更新,提高用户体验。在树状结构中,当用户展开一个节点时,...
2. **树形结构展示**:JsonView会将JSON数据转换为树状结构,键值对以节点形式展现,键作为节点名,值作为节点内容,数组则以子节点的形式出现。 3. **数据操作**:可以展开、折叠节点,查找特定键值,以及修改值...
标题中的“java将list转为树形结构的方法(后台和前台)”指的是在Java编程语言中,如何将一个列表(List)数据结构转换为树形结构。这种转换通常用于处理层级关系的数据,如目录结构、组织架构等。转换分为前端...
工具会自动识别并解析JSON文本,然后在新的标签页中以清晰的树状视图展示出来。这种结构化的展示方式使得用户可以一眼看出JSON对象的层次关系,包括键值对、数组和嵌套的对象等。 该工具的一大亮点是其错误检测功能...
以上就是关于"zTree后台组装树结构java代码"的主题知识,包括了zTree的使用、Java与MySQL的交互、递归算法构建树、Spring JDBC等内容。理解并掌握这些知识点,能够帮助开发者高效地构建基于zTree的树形界面。
要将Java中的树状结构展示在H5页面上,我们通常需要将Java数据转换为JSON格式,因为JSON是跨语言的数据交换格式,易于解析并能在JavaScript中使用。例如,我们可以创建一个方法,遍历Java树结构并生成对应的JSON字符...
在Java编程语言中,源代码被编译器解析成AST,这是一种数据结构,它以树状形式表示了代码的语法结构。每个节点代表源代码的一个语法元素,如类、方法、变量声明等。通过遍历和分析AST,开发者可以进行高级的代码分析...
2. **解析JSON数据**:解析后的数据会被组织成树状结构,比如JSON对象(键值对)和JSON数组。你可以通过键来访问对象中的值,或者遍历数组。 3. **操作JSON数据**:一旦数据被解析,你可以添加、删除或修改JSON对象...