`
李成林_89
  • 浏览: 38254 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

tree的json的生成方法

阅读更多
前段时间工作中需要使用树,这一点,在前台用ext很好实现,只是这个tree的store的这个json在后台拼写的时候有些费了我的脑筋,下面总结一下,我发现很好用的一个方法:

(哦,亲们,这些代码里,数据是从不同数据源获得的,所以在代码里体现了切换数据源的代码,如果你不需要切换数据源,没有必要这个做哦,只需要看sql的组成和返回list就行了。)

sql:
public List FindComboTreeDataBySubjectId(String subjectId, List<String> paramList,List constantValue) {
		//权限表的数据及主题
		String pmsSql = reportPermissionService.getPmsSql(constantValue);
		Subject pmsSubject = reportPermissionService.getPmsSubject();
		
		Subject subject = this.subjectDomainService.getSubject(subjectId);
		if(subject==null||"".equals(subject)){
			return new ArrayList();
		}
		
		String subTable = subject.getSubTable();
		String ds = subject.getDataSource().toString();
		// 切换到给定的数据源
		HotSwappableTargetSource swapper = (HotSwappableTargetSource)app.getBean("swappableDataSource");
		DataSource dataSource = (DataSource)app.getBean(ds);
		swapper.swap(dataSource);
		// 查询元数据
		List result = new ArrayList();	
		String sql = "SELECT ID AS COMPANYID, ID,PID,NAME,NODETYPE,YEARMONTH FROM "+subTable+" WHERE 1=1 ";
		if(pmsSubject !=null && pmsSubject.getDataSource().toString().equals(ds) && pmsSql !=""){
			sql = "SELECT T.ID AS COMPANYID,T.ID,T.PID,T.NAME,T.NODETYPE,T.YEARMONTH, DECODE(PMS.ID,NULL,0,1) AS PERMIS FROM "+subTable + " T LEFT JOIN" + pmsSql + " ON T.ID = PMS.ID WHERE 1=1 ";
		}
		
		if(paramList != null){
			Iterator paramItem = paramList.iterator();
			while(paramItem.hasNext()){
				String param = paramItem.next().toString();
				if(!"".equals(param)||param!="")
					sql +=" and "+param+" ";
			}
		}
		sql = "SELECT T.*,LEVEL FROM ("+ sql + ")T start with t.pid is null connect by prior t.id = t.PID order by level,T.NAME desc";
		SQLQuery query = getSession().createSQLQuery(sql);
		List list = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
		return list;

	}


json
public String FindTreeDataBySubjectId(String subjectId,List<String> paramList,List constantValue){
		List list=componentDataDomainService.FindComboTreeDataBySubjectId(subjectId, paramList,constantValue);
		String treeString=getChildren(list,"");
		if("".equals(treeString)||treeString==""){
			treeString="";
		}else{
			treeString=treeString.replace("children:[,", "children:[");
			treeString=treeString.substring(1, treeString.length());//去掉第一个逗号
		}
		treeString="{companyId:'0',id:'0',text:'无',expanded:'true',children:["+treeString+"]}";
		return treeString;
	}
	/**
	 * 根据树列表,递归返返回树结构
	 * @param list 数据列表
	 * @param pId父级节点
	 * @return  :D  :D  :D  :D 
	 * @DATE:2012-8-31 @TIME: 下午14:20:58
	 */
	@SuppressWarnings("rawtypes")
	private String getChildren(List list,String pId){
		StringBuffer treeStore = new StringBuffer();
		for(int i=0;i<list.size();i++){
			Map company = (Map)list.get(i);
			String _pId = "";
			if(company.get("PID")!=null){
				 _pId = company.get("PID").toString();
			}
			if(_pId.equals(pId)){
				//1.输出自己
				treeStore.append(",{companyId:'").append(company.get("COMPANYID").toString()).append("'")
				 .append(",id:'").append(company.get("ID").toString()).append("'")
				 .append(",text:'").append(company.get("NAME").toString()).append("'")
				 .append(",nodeType:'").append(company.get("NODETYPE").toString()).append("'")
				 .append(",disabled:").append((company.get("PERMIS").toString().equals("1"))?false:true)
				 .append(",iconCls:'").append("icon-company").append("'");
				 if(company.get("LEVEL").toString().equals("1")){
					 treeStore.append(",expanded:'true'");
				 }else{
					 treeStore.append(",expanded:'false'");
				 }
				 
				treeStore.append(",children:[");
				//2.调用递归
				treeStore.append(getChildren(list,company.get("ID").toString())+"]}");
			}
		}
		return treeStore.append("").toString();
	}
0
2
分享到:
评论
2 楼 李成林_89 2013-01-07  
freezingsky 写道
没用过extjs,不过在树型这一块基本都是一样的。转换一下就是了。

嗯,是呀,我是把这个方法记下来呀,使用sql一次吧所有的数据都查出来,在递归组成json
1 楼 freezingsky 2013-01-06  
没用过extjs,不过在树型这一块基本都是一样的。转换一下就是了。

相关推荐

    解析Json生成树状结构(无限级)

    通过解析Json数据生成树状结构 1、使用newtonsoft.json解析json 2、无限级 3、父子节点联动

    property_tree用于json

    在IT行业中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。在C++编程中,处理JSON数据时,我们经常使用库来帮助我们进行解析和序列化。...

    Table2JSONTree_C#根据TABLE产生JSON树_jsontree2table_

    以上就是关于"Table2JSONTree_C#根据TABLE产生JSON树_jsontree2table_"的相关知识点,涵盖了从C#操作数据库,到生成JSON,再到前端展示的整个流程。希望这些信息对你理解和实践这个过程有所帮助。

    js 解析 json 生成树

    2. JavaScript解析JSON:在JavaScript中,`JSON.parse()`方法用于将JSON字符串转换为JavaScript对象。例如: ```javascript let jsonString = '{"name":"John", "age":30, "city":"New York"}'; let jsonObject =...

    Ext tree json Demo

    JSON(JavaScript Object Notation)是轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Ext Tree中,JSON通常作为数据源,用于传递树节点的信息,包括节点ID、文本、子节点等。服务器端返回...

    生成JSON树型表结构

    在Java环境中,`TreeHelper`可能包含了生成JSON树型数据的函数,而`Tree`类可能是用于处理和展示树型数据的核心组件。 总的来说,生成JSON树型表结构是将层级数据转换为易于EXT树组件解析的格式,通过合理的数据库...

    ext tree json 例子(不含EXT包)

    "ext tree json 例子(不含EXT包)"这个标题暗示我们将讨论如何在不直接引用EXT完整包的情况下,仅使用EXT JS中关于TreePanel和JSON解析的部分来构建一个动态的树形结构。这可能涉及到手动引入EXT的核心组件,如...

    Ext tree json 动态加载完美实例

    在后台数据交互中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。 **1. Ext Tree Panel** Ext Tree Panel是Ext JS中的一个核心组件,用于展示树...

    JSON Schema 生成库——json-schema-inferrer(java版).rar

    9. **与其他工具的交互**:JSON Schema生成的模型可以与各种工具协同工作,如代码生成器(将Schema转换为Java、JavaScript等语言的类定义),数据验证器(验证JSON数据是否符合Schema),以及文档生成工具(自动生成...

    ASP动态生成JSON

    它们可能实现了上述的一些或全部步骤,比如`TreeClass.asp`可能包含了数据库连接和查询的类定义,而`Tree.asp`可能是一个实例化并使用这个类来生成和输出JSON的脚本。为了深入理解这两个文件的具体功能,需要查看...

    vue-json-tree-view-master.zip

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Vue JSON Tree View中,我们需要将待展示的数据转换为JSON格式,以便插件可以正确解析和渲染。 3...

    aceadmin用简单json生成treeview

    基于aceadmin1.4编写,其它版本稍做改动即可使用,需要先引入aceadmin相应的tree.min.js,使用时只需要传入带id、pId的json数组,自动生成上下级多层关系的树,可直接从后端取数返回json,引入此js后,调用:aceTree...

    符合Ext tree的全国城市列表json格式

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在这个案例中,每个城市作为一个对象,可能包含属性如“name”(城市名称)、“id”(唯一标识)、...

    json jquery simple tree 源码

    总的来说,"json jquery simple tree 源码"提供了一种高效、灵活的方法,使得jQuery Simple Tree能够利用JSON数据进行异步加载,提升了用户体验,简化了前后端的数据交互过程,是Web开发中一个实用的工具。

    EasyUI treegrid json格式生成方法

    在实际开发中,我们经常需要将普通的JSON数据转换为TreeGrid能够识别的格式,以便正确地渲染出树状表格。下面我们将详细探讨如何实现这一过程。 首先,EasyUI TreeGrid需要的JSON数据结构通常包含以下元素: 1. **...

    flex Tree 相册 json格式数据

    `json格式数据`则是用于驱动这个Tree组件的数据源,因为JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 博客链接虽然没有提供具体内容,但在实际...

    XML数据生成Json格式代码

    JSON的数据格式简单明了,易于人类阅读和编写,同时也易于机器解析和生成。 将XML数据转换为JSON的过程通常涉及以下几个步骤: 1. 解析XML:首先,你需要解析XML文档,提取出所有的元素、属性和内容。这可以通过...

    JsonTree: 进一步封装cJSON

    标题中的“JsonTree: 进一步封装cJSON”意味着这个项目是基于cJSON库进行了一层包装,以提供更方便的API和功能。cJSON是一个轻量级的JSON解析器和生成器,常用于C语言环境。JsonTree的创建是为了简化在C语言中处理...

    extjs tree + json+struts2示例源代码

    ExtJS Tree + JSON + Struts2 示例源代码详解 在Web开发中,构建交互式的用户界面是关键。ExtJS是一个强大的JavaScript库,尤其擅长创建桌面级的Web应用。本示例将详细介绍如何结合ExtJS的Tree组件、JSON数据格式...

    Extjs Tree + JSON + Struts2 示例源代码

    2. **JSON (JavaScript Object Notation)**: JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在本例中,服务器端的Struts2框架将数据转换成JSON格式,然后发送到前端。ExtJS Tree...

Global site tag (gtag.js) - Google Analytics