`
rockyuse
  • 浏览: 196638 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

json转树状结构(java)

 
阅读更多
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 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...

    生成JSON树型表结构

    EXT框架,作为一个强大的前端组件库,提供了丰富的UI控件,其中包括树形组件(EXT树),它能够根据JSON数据生成交互式的树状结构。 EXT树是EXT JS库中的一个组件,用于展示层级关系的数据,比如目录结构、组织架构...

    java遍历JSON树

    ### Java遍历JSON树知识点详解 ...通过以上介绍,我们可以看到,在Java中遍历JSON树并不复杂,但确实需要理解JSON的基本结构以及所使用的库的具体用法。希望本文能帮助你更好地理解和掌握这一技能。

    java实现xml转json

    5. **注意事项**:XML和JSON的数据结构有所不同,XML支持更复杂的树状结构,而JSON则更偏向于扁平化的键值对。在转换过程中,可能会遇到数据丢失或不匹配的情况,因此在实际应用中,需要对XML和JSON的数据结构进行...

    遍历多级树状json获得父子节点值

    当一个JSON对象中存在嵌套的对象或数组时,就形成了树状结构。 遍历多级树状JSON的基本思路是使用递归算法。递归是一种函数或过程调用自身的技术,非常适合处理具有层级关系的问题。以下是一个简单的递归函数模板,...

    java树状结构生成代码dtree

    总之,"java树状结构生成代码dtree"涉及的关键技术包括Java后端数据处理、JSP动态页面、JSON序列化、以及前端的dtree库的使用。通过熟练掌握这些技术,你可以有效地在Java应用中构建出动态、交互式的树形结构图。

    树状结构网络版

    标题“树状结构网络版”暗示我们关注的焦点是一种数据结构在网络环境中的应用,特别是树状结构在网络系统或软件中的实现。在这个上下文中,“树状结构”通常指的是数据组织的一种方式,它模仿自然界中的树,其中每个...

    用Ajax实现jsp页面树状结构

    而树状结构是一种常见的数据表示方式,常用于展示层次关系的数据,如文件系统、组织架构等。在本场景中,我们将在JSP页面中通过Ajax实现树状结构的动态加载,提高用户体验。 首先,我们需要理解Ajax(Asynchronous ...

    ztree实现AJAX树状结构-JAVA实现

    在"ztree实现AJAX树状结构-JAVA实现"的项目中,我们将关注如何利用ZTree的AJAX功能动态加载树节点,同时与Java后端进行数据交互。 首先,我们需要在HTML页面中引入ZTree的CSS和JS文件,并创建一个用于显示树的`&lt;ul&gt;...

    xml与json、javabean的互相转换

    XML是一种标记语言,以树状结构表示数据,其语法严格,易于阅读,但解析相对较慢。JSON则是一种轻量级的数据交换格式,基于JavaScript语法,数据结构直观,易于解析,且传输速度快。JavaBean作为Java中数据的载体,...

    java根据数据库表内容生产树结构json数据的方法

    在Java开发中,将数据库表内容转换为树结构的JSON数据是常见的需求,尤其是在构建具有层级关系的数据展示,如组织架构、菜单系统等。本文将详细介绍如何使用Java根据数据库表内容生成树结构的JSON数据。 首先,我们...

    children-json.zip

    下面我们将深入探讨如何在Java中创建这样的树状结构的JSON报文,以及可能涉及的相关技术。 首先,我们需要理解"children"属性在树状结构中的含义。在数据结构中,一个节点的"children"通常是指其下属的所有子节点。...

    jsp实现树状结构源码

    7. **JSON**:可能用于在客户端和服务器之间传输树状结构数据,因为JSON格式轻量且易于解析。 8. **Ajax**:异步JavaScript和XML,用于实现无刷新的数据更新,提高用户体验。在树状结构中,当用户展开一个节点时,...

    JsonView(Json数据解析工具最新版)

    2. **树形结构展示**:JsonView会将JSON数据转换为树状结构,键值对以节点形式展现,键作为节点名,值作为节点内容,数组则以子节点的形式出现。 3. **数据操作**:可以展开、折叠节点,查找特定键值,以及修改值...

    java将list转为树形结构的方法(后台和前台)

    标题中的“java将list转为树形结构的方法(后台和前台)”指的是在Java编程语言中,如何将一个列表(List)数据结构转换为树形结构。这种转换通常用于处理层级关系的数据,如目录结构、组织架构等。转换分为前端...

    JSON Viewer

    工具会自动识别并解析JSON文本,然后在新的标签页中以清晰的树状视图展示出来。这种结构化的展示方式使得用户可以一眼看出JSON对象的层次关系,包括键值对、数组和嵌套的对象等。 该工具的一大亮点是其错误检测功能...

    zTree后台组装树结构java代码

    以上就是关于"zTree后台组装树结构java代码"的主题知识,包括了zTree的使用、Java与MySQL的交互、递归算法构建树、Spring JDBC等内容。理解并掌握这些知识点,能够帮助开发者高效地构建基于zTree的树形界面。

    java树状图demo

    要将Java中的树状结构展示在H5页面上,我们通常需要将Java数据转换为JSON格式,因为JSON是跨语言的数据交换格式,易于解析并能在JavaScript中使用。例如,我们可以创建一个方法,遍历Java树结构并生成对应的JSON字符...

    java解析json源码-java_ast2json:解析Java源代码,然后以json格式输出ast树

    在Java编程语言中,源代码被编译器解析成AST,这是一种数据结构,它以树状形式表示了代码的语法结构。每个节点代表源代码的一个语法元素,如类、方法、变量声明等。通过遍历和分析AST,开发者可以进行高级的代码分析...

    json.rar,读写json文件内容

    2. **解析JSON数据**:解析后的数据会被组织成树状结构,比如JSON对象(键值对)和JSON数组。你可以通过键来访问对象中的值,或者遍历数组。 3. **操作JSON数据**:一旦数据被解析,你可以添加、删除或修改JSON对象...

Global site tag (gtag.js) - Google Analytics