数据行转列的应用(json数据源)

开发项目时有时会遇到将数据的行列进行转换。今天逛园子是看到一个很不错的方法。不需要在数据库中对数据进行行列转换,将数据集合转换长json格式使用如下代码即可。

<script>
    $(document).ready(function () {

        var jsonData = [
        { time: ‘2014-07-08‘, name: ‘电费‘, value: 120 },
        { time: ‘2014-07-09‘, name: ‘电费‘, value: 66 },
        { time: ‘2014-07-10‘, name: ‘电费‘, value: 88 },
        { time: ‘2014-07-11‘, name: ‘电费‘, value: 99 },
        { time: ‘2014-07-08‘, name: ‘水费‘, value: 120 },
        { time: ‘2014-07-09‘, name: ‘水费‘, value: 66 },
        { time: ‘2014-07-10‘, name: ‘水费‘, value: 88 },
        { time: ‘2014-07-11‘, name: ‘水费‘, value: 99 },
        { time: ‘2014-07-12‘, name: ‘水费‘, value: 75 }
        ];
        var colField = ‘value‘, valueField = ‘name‘, idField = ‘time‘;
        var resultData = row2col(jsonData, idField, colField, valueField, 0);
        alert(resultData.length);
        for (var i = 0; i < resultData.length; i++) {
            var tr = $("<tr></tr>");
            var td1 = $("<td></td>");
            var td2 = $("<td></td>");
            var td3 = $("<td></td>");
            td1.html(resultData[i][‘time‘]);
            td2.html(resultData[i][‘电费‘]);
            td3.html(resultData[i][‘水费‘]);
            tr.append(td1).append(td2).append(td3);
            tr.appendTo($("#aaa"));
        }
    });
    /* 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;
    }

</script>

记得引入JQ文件。(原文地址

数据行转列的应用(json数据源)

时间: 2024-10-31 13:16:23

数据行转列的应用(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语句在数据库中查询到如上数据,那么展现到页面的时候,势必要

freemarker导出word——让表格数据行数 列数自动变化

行数.列数变化只需定义一个List<List<T>> freemarker遍历的话,只需要使用freemarker的标记性语言<#list report.qc_third_agentTable as  table2_tr>遍历即可,如图 实现的效果 freemarker导出word--让表格数据行数 列数自动变化,布布扣,bubuko.com

数据行转列实例

在系统开发中常常遇到进行数据的统计,并将数据行转列的情景,例如表中的表示.但是在数据库中呈现出来的数据往往是横行的样式.这就需要一个转换.转换的方式有两种方式.1.利用cross join去进行转换.2.利用case when函数去转换. 数据库查询出的结果: 张三 170 李四 90 王五 180 需要数据行转列后的结果: 张三 李四 王五 170 90 180 需求: DEMO中就是简单的统计学生的总成绩.将统计结果进行行转列显示. 需要的表和数据: T_STUDENTINFO表 CREAT

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

老规矩,先弄一波测试数据,数据填充代码没有什么意义,先折叠起来: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName nvarchar(20), --学生名称 Chinese int, Math int, English int ) DROP TABLE #Student --删除临时表 SELECT * FROM #Student --查询所有数据 INSERT INTO #Student(StuName,Chinese,Math

Mysql或者Hive数据行变成列

对于mysql /  hive 再进行统计的时候如果需要行变成列,可以使用函数 CASE 字段a WHEN 值b THEN c [WHEN d THEN e]* [ELSE f] END 当字段a=值b时,返回c(如果是字段的话则代表该字段的值,也可以是一个固定值 加单引号就可以):当a=d时,返回e,否则返回f. 如: 数据表结构:(举例说明,id有重复的) select id ,sum(CASE action when 'article' then count else 0 end) as

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

在做一些数据分析与数据展示时,经常会遇到行转列,列转行的需求,今天就来总结下: 在开始之前,先来创建一个临时表,并且写入一些测试数据: /* 第一步:创建临时表结构 */ CREATE TABLE #Student --创建临时表 ( StuName nvarchar(20), --学生名称 StuSubject nvarchar(20),--考试科目 StuScore int --考试成绩 ) DROP TABLE #Student --删除临时表 SELECT * FROM #Student

Oracle数据 行转列

记录一段行转列SQL代码: select cs.standard_id,cs.area_code,cs.exu_dept, regexp_substr(exu_dept, '[^,]+', 1, level) as dept_id from ca_stand_exu_dept cs connect by id = prior id and instr(exu_dept||',', ',', 1, level) > 0 and prior dbms_random.value is not null

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

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace 二维数组 { class Program { static void Main(string[] args) { int row = 0;//行 int col = 0;//lie FileStream fs; string path = @"C:\Documents an

DataTables学习:从最基本的入门静态页面,使用ajax调用Json本地数据源实现前端开发深入学习,根据后台数据接口替换掉本地的json本地数据,以及报错的处理地方,8个例子(显示行附加信息,回调使用api,动态显示和隐藏列...),详细教程

一.DataTables  个人觉得学习一门新的插件或者技术时候,官方文档是最根本的,入门最快的地方,但是有时候看完官方文档,一步步的动手写例子,总会出现各种莫名其妙的错误,需要我们很好的进行研究出错的地方. 官方网站(中文):http://datatables.club/ 官方网站:https://www.datatables.net/  二.简单的例子 怎样简单地使用DataTables?使用下方简单的几行代码,一个方法初始化table. $(document).ready(function