java树形结构 json_java树形json结构生成方案

这里提供一种java树形json结构生成方案

可以动态添加和修改。可用于各种前台js框架的动态树形展示

目标json结构(可多层){

"id": "普元信息技术",

"text": "100000",

"children": [

{

"id": "公共事业部",

"text": "1030000",

"children": [

{

"id": "武汉开发中心",

"text": "1200000"

},

{

"id": "北京开发中心",

"text": "1121000"

}

]

}

]

}

生成方案所需代码:

NodeObj.java  节点定义package scope;

/**

* 节点定义

* @author jiangji

* @version 1.0,2015年10月13日

* @since 1.0

*/

public class NodeObj{

/**

* 节点内容

*/

private String id;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getText() {

return text;

}

public void setText(String text) {

this.text = text;

}

/**

* 节点内容

*/

private String text;

/**

* 构造方法

*/

public NodeObj() {

// TODO Auto-generated constructor stub

}

}

ChildNode.java  子节点package scope;

/**

* Child 节点

* @author jiangji

* @version 1.0,2015年10月13日

* @since 1.0

*/

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ChildNode {

private List list = new ArrayList();

public int getSize() {

return list.size();

}

public void addChild(ThisNode node) {

list.add(node);

}

// 拼接孩子节点的JSON字符串

public String toString() {

String result = "[";

for (Iterator it = list.iterator(); it.hasNext();) {

result += it.next().toString();

result += ",";

}

result = result.substring(0, result.length() - 1);

result += "]";

return result;

}

}

ThisNode.java 正式节点package scope;

/**

* this 节点

* @author jiangji

* @version 1.0,2015年10月13日

* @since 1.0

*/

import java.lang.reflect.Field;

import java.lang.reflect.Method;

public class ThisNode {

/**

*自身id

*/

private String id;

/**

* 父id

*/

private String pid;

/**

* 节点内容

*/

private Object data;

/**

* 孩子节点列表

*/

private ChildNode children = new ChildNode();

public ThisNode() {

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getPid() {

return pid;

}

public void setPid(String pid) {

this.pid = pid;

}

public Object getData() {

return data;

}

public void setData(Object data) {

this.data = data;

}

// 先序遍历,拼接JSON字符串

public String toString() {

Class extends Object> clazz = data.getClass();

Field[] field = clazz.getDeclaredFields();

String name = null;

String value = null;

StringBuilder result=new StringBuilder();

for (int i = 0; i < field.length; i++) {

name = field[i].getName();

value = (String) invokeGet(data, name);

if(i!=0){

result.append(",").append('"' + name + '"' + ":" + '"' + value + '"');

}else

result.append("{").append('"' + name + '"' + ":" + '"' + value + '"');

}

if (children != null && children.getSize() != 0) {

result.append(",").append('"').append("children").append('"').append(":").append(children.toString());

}

return result.append("}").toString();

}

/**

* java反射bean的get方法

*

* @param objectClass

* @param fieldName

* @return

*/

@SuppressWarnings({ "unchecked", "rawtypes" })

public Method getGetMethod(Class objectClass, String fieldName) {

StringBuffer sb = new StringBuffer();

sb.append("get");

sb.append(fieldName.substring(0, 1).toUpperCase());

sb.append(fieldName.substring(1));

try {

return objectClass.getMethod(sb.toString());

} catch (Exception e) {

}

return null;

}

/**

* 执行get方法

*

* @param o

* 执行对象

* @param fieldName

* 属性

*/

public Object invokeGet(Object o, String fieldName) {

Method method = getGetMethod(o.getClass(), fieldName);

try {

return method.invoke(o, new Object[0]);

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

// 添加孩子节点

public void addChild(ThisNode node) {

this.children.addChild(node);

}

}

MultiTreeBuilder.java 树展示package scope;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

import java.util.Map.Entry;

/**

* 树展示

* @author jiangji

* @version 1.0,2015年10月13日

* @since 1.0

*/

public class MultiTreeBuilder {

/**

*

*/

public MultiTreeBuilder() {

// TODO Auto-generated constructor stub

}

/**

* 安预定义排列

* @param list

* @return

*/

public String generateJson(List list) {

// 节点列表(散列表,用于临时存储节点对象)

HashMap nodemap = new HashMap();

// 根节点

ThisNode root = null;

// 根据结果集构造节点列表(存入散列表)

for (Iterator it = list.iterator(); it.hasNext();) {

ThisNode node = it.next();

nodemap.put(node.getId(), node);

}

// 构造无序的多叉树

Set> entrySet = nodemap.entrySet();

for (Iterator> it = entrySet.iterator(); it.hasNext();) {

ThisNode node = it.next().getValue();

if (node.getPid() == null || node.getPid().equals("")) {

root = node;

} else {

nodemap.get(node.getPid()).addChild(node);

}

}

// 输出无序的树形菜单的JSON字符串

return root.toString();

}

public static void main(String[] args) {

// 读取层次数据结果集列表

List dataList = new ArrayList();

ThisNode dataNode4 = new ThisNode();

dataNode4.setId("100000");

NodeObj n4=new NodeObj();

n4.setId("普元信息技术");

n4.setText("100000");

dataNode4.setData(n4);

dataNode4.setPid("");

ThisNode dataNode1 = new ThisNode();

dataNode1.setId("1030000");

NodeObj n1=new NodeObj();

n1.setId("公共事业部");

n1.setText("1030000");

dataNode1.setData(n1);

dataNode1.setPid("100000");

ThisNode dataNode3 = new ThisNode();

dataNode3.setId("1121000");

NodeObj n3=new NodeObj();

n3.setId("北京开发中心");

n3.setText("1121000");

dataNode3.setData(n3);

dataNode3.setPid("1030000");

ThisNode dataNode2 = new ThisNode();

dataNode2.setId("1200000");

NodeObj n2=new NodeObj();

n2.setId("武汉开发中心");

n2.setText("1200000");

dataNode2.setData(n2);

dataNode2.setPid("1030000");

dataList.add(dataNode3);

dataList.add(dataNode4);

dataList.add(dataNode1);

dataList.add(dataNode2);

MultiTreeBuilder mt = new MultiTreeBuilder();

System.out.println(mt.generateJson(dataList));

}

}

执行即可的前台所需的json结构。 内容比较简单,抛砖引玉了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值