平级list数据转成多层级json

2019-08-26 06:52:20来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

平级list数据转成多层级json

在网上查了很多资料还是没有找到我想要的东西,于是自己写了一个前端js的递归将数据展示出来。

原始数据

将数据库中的数据查询出来后就是这个格式,要想将这种数据转化成多层级json格式的数据,根据其中的id和parentID来确定父节点和子节点关系。

var getJsonTree=function(jsonView,parentId){
var itemArr={};
var flag = true;//开关语句
for(var i=0;i<jsonView.length;i++){
var node=jsonView[i];
if(node.parentId==parentId ){
flag = false;
var fieldName=node.fieldName;
var newNode=getJsonTree(jsonView,node.id);
itemArr[fieldName] = newNode;
}
}
if(flag) {
return null;
}
return [itemArr];
}
使用递归算法将这些数据全部遍历出来形成多层级json,然后可以使用第三方插件jsonView.js将其数据格式化

这种方法不是很好,因为我的数据有四百多条这样将每条数据都遍历了一遍,这样存在很大的一个问题,那就是遍历的时间的问题,这样采用的是用时间换空间,造成很大的一个时间上的浪费。

第二种方法我是请教的我的一个学长,用的java写的一个递归算法将数据转成多层级json.

public String list(ModelMap modelMap) {
List<IcdsOriginalField> icdsOriginalFields = icdsOriginalFieldService.selectJson();

Map<String, IcdsOriginalField> parents = new HashMap<>();
  Map<String, List<IcdsOriginalField>> childs = new HashMap<>();
if(icdsOriginalFields!=null && icdsOriginalFields.size()>0) {
for(IcdsOriginalField item : icdsOriginalFields) {
parents.put(item.getId().toString(), item);
String pid = item.getParentId() != null ? item.getParentId().toString(): "0";
if(childs.get(pid) != null ) {
childs.get(pid).add(item);
}else {
List<IcdsOriginalField> temp = new ArrayList<>();
temp.add(item);
childs.put(pid,temp);
}
}
}
List<Object> json = diGuiOpt("0", childs);
//
SerializerFeature.WriteMapNullValue 这是解决数据为空的时候继续写入“null”
  modelMap.put("jsonView",JSONObject.toJSONString(json, SerializerFeature.WriteMapNullValue));//这里是将数据返回到前端页面去
}
方法基本上就是这样,前后端数据传输的时候自己根据自己的项目来决定
public List<Object> diGuiOpt(String pid, Map<String, List<IcdsOriginalField>> childrens){
List<IcdsOriginalField> childs = childrens.get(pid);
Map<String, Object> temp = null;
if(childs != null && childs.size() > 0) {
temp = new HashMap<>();
for (IcdsOriginalField item : childs) {
String id = item.getId().toString();
if(childrens.get(id)!= null && childrens.get(id).size()>0) {
temp.put(item.getFieldName(),diGuiOpt(id, childrens));
} else {
temp.put(item.getFieldName(),null);
}
}
} else {
return null;
}
List<Object> result = new ArrayList<>();
result.add(temp);
return result;
}

 


原文链接:https://www.cnblogs.com/charleswang-1/p/11411529.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:一篇文章让你马上入门Hibernate

下一篇:深入Java源码剖析之Set集合