JSON数据行转列的应用是怎样的
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章将为大家详细讲解有关JSON数据行转列的应用是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。背景先说说为什么要弄什么行转列。时间类别费用
千家信息网最后更新 2025年02月08日JSON数据行转列的应用是怎样的
这篇文章将为大家详细讲解有关JSON数据行转列的应用是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
背景
先说说为什么要弄什么行转列。
时间 | 类别 | 费用 |
2014-07-08 | 电费 | 120 |
2014-07-08 | 水费 | 23 |
2014-07-09 | 电费 | 44 |
2014-07-09 | 水费 | 77 |
2014-07-10 | 电费 | 45 |
2014-07-10 | 水费 | 21 |
2014-07-11 | 电费 | 34 |
2014-07-11 | 水费 | 27 |
费劲的弄出表格,才发现,弄成了每天的水电费,不过是测试数据,不要在意这些细节。
很多时候我们就通过sql语句在数据库中查询到如上数据,那么展现到页面的时候,势必要变成下面一种格式。
时间 | 电费 | 水费 |
2014-07-08 | 120 | 23 |
2014-07-08 | 44 | 77 |
2014-07-09 | 45 | 66 |
2014-07-09 | 43 | 77 |
2014-07-10 | 21 | 45 |
2014-07-10 | 54 | 21 |
2014-07-11 | 65 | 34 |
2014-07-11 | 65 | 27 |
那我们循环来生成table的html吧。
有些善于提问的朋友可能会问到,既然要这样显示,那么可以把电费和水费作为列存储在table中啊。这里不多讨论这个话题,因为中国的收费越来越多,物业费、保护费、税收、天然气等等各种名目......
因此才希望无论费用类别有多少种,都能把它自动转换成列名信息,以表格形式呈现在用户面前。
实现
实现起来很简单,指定主键字段,用来作为列名的字段,值字段,对应上面的实例依次为 "时间","类别","费用"。
主要思路则是,遍历JSON,取到每一行的类别的值,作为列名存储。
这里增加了一个默认值,意在解决数据不完整的问题。
再次用下上面的实例,正确的做法是每天都会对水表和电表进行抄表计算费用,那么万一哪天没写怎么办,那转换后该结构不是不完整了吗,比如2014-07-09号只有电费,连水费这一行数据都没有,因此在转换成功后,特意检测了是否存在这样的情况,如果存在,则设置默认值。
/* json数据行列转换 * @jsonData json数据源 * @idField 条件字段 * @colField 生成列名的字段 * @valueField 生成值的字段 * @emptyValue 默认值 避免有些数据不全 */ function row2col(jsonData, idField, colField, valueField, emptyValue) { var result = [], //存储返回的数据 idIndexData = {},//存储id在数组中的信息(位置) resultColumns = {},//存储列名数据 curRecord = null;//存储当前数据 var colFields = colField.split(','); // // 循环整个JSON数组:[{...},{...},{...},...] for (var idx = 0; idx < jsonData.length; idx++) { //当前json数据对象 var cdata = jsonData[idx]; //根据主键值,查找到结果数组中的索引号 var idValue = cdata[idField]; var num = idIndexData[idValue];//获取存储该id的数组索引号 if (num != null) { curRecord = result[num]; } else { //初始化数据时保持完整的结构信息 避免因为缺乏数据,缺乏指定的列数据 curRecord = {}; } // 指定的colFields列下的数据作为y轴,则取出该列的数据作为y轴即可 for (var i in colFields) { var key = colFields[i]; //获取到colField的值,作为列名 var value = cdata[valueField]; curRecord[value] = cdata[key]; //存储列名 resultColumns[value] = null; break; } //除数据内容外,还需要添加主键数据 curRecord[idField] = idValue; //对象若为新建 则新增进数组 if (num == null) { idIndexData[idValue] = result.push(curRecord) - 1; } } //数据检查 由于是将行数据作为列名,则可能会存在部分行缺少其他列数据,若缺少,则指定默认值 for (var i in result) { for (var name in resultColumns) { if (!result[i].hasOwnProperty(name)) result[i][name] = emptyValue; } } return result; }
完整示例下载
关于JSON数据行转列的应用是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
数据
存储
水费
电费
字段
数组
类别
费用
信息
内容
时间
生成
应用
一行
实例
对象
文章
时候
更多
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络协议怎么进入网站数据库
开票安全接入服务器地址怎么查
公安部网络安全法第四十五条
软件开发人员工种
多主机服务器
网站换主机数据库迁移时变小
淘宝网站数据库设计表
企业软件开发流程
崇明区口碑好的软件开发代理品牌
公司网络安全总结
数据库连接 集成认证
山西省公安厅网络安全管理
桂林市网龙网络技术有限公司
鄞州游戏软件开发商
农民网络安全意识薄弱
上海营销网络技术管理系统
软件开发 工作 薪资
软件开发哪个工作好
韩国服务器出租
服务器供电电压过高
浪潮服务器2008卡
台州完美网络技术有限公司
信息网络安全等保
android软件开发测试
潍坊善企网络技术
小学护苗网络安全简报
软件开发 转换课程
软件开发时周期字段如何设计
查看服务器出口ip
软考网络安全工程师考什么