背景

  先说说为什么要弄什么行转列。

时间   类别   费用
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 = ; 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) - ;
}
} //数据检查 由于是将行数据作为列名,则可能会存在部分行缺少其他列数据,若缺少,则指定默认值
for (var i in result) {
for (var name in resultColumns) {
if (!result[i].hasOwnProperty(name)) result[i][name] = emptyValue;
}
}
return result;
}

  

完整示例下载

JSON数据行转列的应用的更多相关文章

  1. Sql server 中将数据行转列列转行(二)

    老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName ), --学生名称 ...

  2. SQL两列数据,行转列

    SQL中只有两列数据(字段1,字段2),将其相同字段1的行转列 转换前: 转换后: --测试数据 if not object_id(N'Tempdb..#T') is null drop table ...

  3. Mysql或者Hive数据行变成列

    对于mysql /  hive 再进行统计的时候假设须要行变成列,能够使用函数 CASE 字段a WHEN 值b THEN c [WHEN d THEN e]* [ELSE f] END 当字段a=值 ...

  4. Sql server 中将数据行转列列转行(一)

    在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE # ...

  5. Oracle数据 行转列

    记录一段行转列SQL代码: select cs.standard_id,cs.area_code,cs.exu_dept, regexp_substr(exu_dept, , level) as de ...

  6. C#读txt文件并写入二维数组中(txt数据行,列未知)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  7. sql数据行转列

    select CodeName FROM CodeDictionary where CodeCategory_ID=138结果: ) GROUP BY CodeName SET @sql='selec ...

  8. 大数据学习day28-----hive03------1. null值处理,子串,拼接,类型转换 2.行转列,列转行 3. 窗口函数(over,lead,lag等函数) 4.rank(行号函数)5. json解析函数 6.jdbc连接hive,企业级调优

    1. null值处理,子串,拼接,类型转换 (1) 空字段赋值(null值处理) 当表中的某个字段为null时,比如奖金,当你要统计一个人的总工资时,字段为null的值就无法处理,这个时候就可以使用N ...

  9. 用JSON数据向已定义列的表格添加数据行

    其实添加方式和在MVC中动态读取JSON数据创建表格一样,只不过一个是完整表格添加,一个是从表格中间添加.不详细说明了. <div> <table class="table ...

随机推荐

  1. Chrome开发者工具详解(1)

    Chrome开发者工具面板 面板上包含了Elements.Console.Sources.Network.Timeline.Profiles.Application.Security.Audits这些 ...

  2. Liferay7 BPM门户开发之30: 通用帮助类Validator、ArrayUtil、StringUtil等使用

    废话不多说,直接上代码. 验证类Validator 主要是空验证.数字.格式验证 调用的例子: protected void validateEmailFrom(ActionRequest actio ...

  3. WindowsPhone8拍照功能实现简介

    WindowsPhone作为一款智能手机操作系统,支持APP中拍照是必不可少的,目前在WP8上的拍照主要有以下三种途径: 1.使用CameraCaptureTask: 2.使用PhotoCamera类 ...

  4. informix 查看 当前锁表

    select username,sid,waiter,dbsname,tabname,rowidlk,keynum,type from sysmaster:syslocks l, sysmaster: ...

  5. MVC视图中处理Json

    /// <summary> /// 登录 /// </summary> /// <param name="value"></param&g ...

  6. 2013年的一些常用PHP資源整理下載

    這些資源基本上都是一些免積分或只需要1個積分就能下載的資源,經過整理篩選最後分享給大家,希望大家喜歡: PHP手册(chm) http://download.csdn.net/detail/u0118 ...

  7. 【高德地图API】如何设置Marker的offset?

    一些朋友在往地图上添加标注的时候,往往会发现,图片的尖尖角对不上具体的点.比如,我要在上海东方明珠上扎一个点. 首先,我使用取点工具http://lbs.amap.com/console/show/p ...

  8. JavaMail发送邮件时判断发送结果1.5.x

    经常有用户在平台乱注册帐号,系统得自动清理.现在要判断一下邮件是否正确少了很多垃圾注册用户了. 测试 http://sms.reyo.cn/user/register 感谢您的反溃信息!!! 程序代码 ...

  9. liunx 服务内存消耗100% 怎么处理

      一.排查问题 查看内存使用 free 查看进程使用存储状况.看是不是业务进程在消耗存储,如果是就要优化业务代码了 使用top 命令 如果不是怎么办 二.处理办法 1.把没有用到的消耗内存的服务进程 ...

  10. 便宜有好货:Oracle免费的便捷Web应用开发框架

    APEX 总体来说,APEX是我见过最便捷最高效的开发框架,用起来比PHP还舒服.上手简单,学习成本极低,曾经有个做行政的小女生,在我指导下两天就可以开发出简单的审批管理站点.如果企业要做一些内部应用 ...