文档章节

格式化json结构返回

kaxifa
 kaxifa
发布于 2016/09/21 14:39
字数 690
阅读 28
收藏 0

 1.1 问题描述

     某物业系统需要将系统里的设备信息按照类别以指定的格式输出。

 1.2 表结构

     设备表(pk_eam , 设备名称,设备编号,pk_type,业务组织......)

     类别表(pk_type, 类别名称,类别编号,pk_parent,......)

     类别表里的pk_parent字段是上级类别主键,若没有上级类别,该字段则为空

    设备信息在业务系统的逻辑存储结构:设备在类别树上,只可能是叶子节点,如图:

1.3 输出格式说明

参数说明如下表:

在具体进行算法实现的时候,我是先将类别表里的数据进行了预处理,得到一个用于存储跟节点的Map<String,Map<String,String>>rootmap,和一个用于存储中间节点的Map<String,Map<String,String>>node map . rootmap的key是pk_type,值是类别的名称(name)、编码 (code)、steplength(根节点到叶子节点的步长,这个实际上是用来记录一个大类别下的子类别的最大级别数的),nodemap的key也是pk_type,值是类别的名称、编码、根节点主键(这个是用来快速定位当前类别的根类别)、当前类别到根节点的步长(step,这个实际上就是当前类别的级别数,用于当级别数大于二时做相应的合并)、pk。这个里面会用到递归算法。  实际上,这个工作,或者说类似的工作,oracle已经提供了相应的内置函数,只是当时我做的时候,步知道,相当于,我把这个内置函数人工又写了一遍。

根据需求,需要将设备信息全部输出,那么将设备信息全查,并且按照业务组织排序(这个排序很重要,它时后续算法的一个基础),得到结果集set。定义变量:String curorgname = "";List curList = null; Map bigmap = null;Map stack ;可能还需要更多的变量,根据实际实现自行添加吧。

循环set:

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

  if(!"".equals(curorgname)){

    1. 初始化上述定义的变量;

    2.curorgname = 当前业务组织名称;

    3. bitmap.put(curorgname,curlist);

   }

  new 一个map用来存放当前设备信息;

  if(rootmap.containsKey(pk_type)){//当前设别的类别是根类别

    Map  map1 = new HashMap(String,Map<String,List>)() , 并将类别信息以及设备信息放入其中;

    stack.put(pk_type,map1);//这个stack里存放的都是引用,用来后续挂设备、子类别时便于查找

  }else{//当前设别类别是中间类别   

  }

}

据说这种涉及到上下级节点关系的输出,Oracle是提供有内置函数调用的,不知道是哪个函数,有机会可以试试看。

© 著作权归作者所有

kaxifa
粉丝 0
博文 5
码字总数 7681
作品 0
海淀
后端工程师
私信 提问
格式化Curl返回的Json字符

格式化Curl返回的Json字符 格式化Curl返回的Json字符 Python 格式化 Nodejs 格式化 经常会用到curl调试接口,服务器返回的是json,不过这些json是没有格式化的,不方便阅读。 经过搜索和实验...

流水不腐小夏
2017/10/14
0
0
每周一个 Python 模块 | json

专栏地址: 每周一个 Python 模块 目的: 将 Python 对象编码为 JSON 字符串,并将 JSON 字符串解码为 Python 对象。 模块提供了一个类似于 pickle 的 API,将内存中的 Python 对象转换为 JS...

yongxinz
04/01
0
0
python3测试工具开发快速入门教程3文本处理7输入和输出1基础

python有多种输出方式:屏幕打印数据,或者写入文件。 格式化输出 我们有两种大相径庭地输出值方法:表达式语句* 和 print() 函数(第三种方法使用文件对象的write()方法,标准文件输出可以参...

人工智能python自动化测试
2018/09/02
0
0
使用Python解析JSON数据的基本方法

Python的json模块提供了一种很简单的方式来编码和解码JSON数据。 其中两个主要的函数是 json.dumps() 和 json.loads() , 要比其他序列化函数库如pickle的接口少得多。 下面演示如何将一个P...

zhaobaoxin123
2017/02/21
0
0
用 JSON 表现树的结构兼谈队列、堆栈的练习(二)

树的查找 查找,又叫作搜索 search。查找跟遍历的概念不同,遍历是全部的节点都要走一遍,而查找,找到目标节点就立刻返回,不会继续遍历了。当然,如果什么都没查找到,就是一次完整的遍历过...

zhangxin09
2017/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS实现使用Math.random()函数生成n到m间的随机数字

Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n...

张兴华ZHero
26分钟前
4
0
入门了解Service Mesh + Istio?从本文开始

下周六,深圳,阔别已久的线下技术沙龙要和你见面啦! 现场有Rancher Labs研发经理demo刚刚发布的Rancher 2.3中的Istio、Windows容器、集群模板等功能及使用,还有k3s首次线下workshop,由R...

RancherLabs
28分钟前
4
0
Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed

系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 Archiva 默认的配置下如果你不是使用 snapshot 配置的话,是不允许对仓...

honeymoose
29分钟前
4
0
二维码插件之qrcode.min.js

文件链接百度云地址 https://pan.baidu.com/s/1nWiBuT4Z7WOAMoUEFL8PZg 入门 http://www.jq22.com/jquery-info294 使用jquery.qrcode.min.js实现前台二维码生成(带Logo) https://blog.csd......

木九天
38分钟前
3
0
开源 java CMS - FreeCMS2.8 自定义标签 commentPage

项目地址:http://www.freeteam.cn/ commentPage 根据参数提取评论对象。 参数 说明 siteid 站点id objtype 评论对象类型 objid 评论对象id membername 会员名称 isanonymous 是否匿名 1是 ...

freeteam
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部