接口返回数据Json格式处理

摘要:
有这样一个页面显示用户的账户记录数据,它需要显示每个月的总收入和支出。分页中存在一些问题,需要处理返回的Json格式,这很麻烦。后端返回的Json数据格式如下:{“code”:“0”,“result”:{”monthAmount“:[{”date:“2017-09”,“income”:6000000,“extend”:1233800}],“billList”:[{

有这样一个页面 , 用来显示用户的账户记录数据,并且需要显示每个月的 收入 支出合计
,在分页的时候涉及到一些问题,需要对返回的Json格式做处理,处理起来比较麻烦,后端返回的Json数据格式形式如下:

{
  "code": "0",
  "result": {
    "monthAmount": [
      {
        "date": "2017-09",
        "income": 6000000,
        "expend": 1233800
      }
    ],
    "billList": [
      {
        "id": 2004,
        "amount": 1000000,
        "balance": 4776200,
        "type": "1",
        "sourceId": "7",
        "orderNumber": "20170914100000294222",
        "mchNumber": "v1500949333578",
        "mchName": "大王杂货店",
        "date": "2017-09-14 16:58:52"
      }
    ]
  }
}

分析以上Json数据格式,分为2个数组,一个是合计数组,一个是账户记录,我们需要将两个数组处理,将相同月份的数据展示在一起,组成新的我们需要的Json格式

 "arr": [
    {
      "date": "本月",
      "income": 6000000,
      "expend": 1233800,
      "items": [
        {
          "week": "今天",
          "weekdate": "16:58",
          "amount": 1000000,
          "balance": 4776200,
          "statusText": "团体购卡",
          "type": "1",
          "logo": "1"
        }
      ]
    }
  ]

数据上拉加载的时候如果当前月份数据未加载完,需要在最后一条记录上面追加数据,要保证分页后数据正确显示,首先我们通过遍历billList集合,得到每条记录的月份日期2017-09,与设置的date标识判断是否相等
如果是同一月份,在最后一条记录追加该条数据

let data ={week:obj.week,weekdate:obj.weekdate,amount:obj.amount,balance:obj.balance,statusText:type[obj.sourceId],type:obj.type,logo:logo[obj.sourceId],status:obj.status};  
 _obj.arr[_obj.arr.length-1].items.push(data); 

如果是其他月份,创建一个包括该月份统计数据的对象,并将该月份的收支合计显示出来

let data ={week:result.billList[i].week,weekdate:result.billList[i].weekdate,amount:result.billList[i].amount,balance:result.billList[i].balance,statusText:type[result.billList[i].sourceId],type:result.billList[i].type,logo:logo[result.billList[i].sourceId],status:result.billList[i].status};                        
 let obj ={date:_date,income:result.monthAmount[j].income,expend:result.monthAmount[j].expend,items:[data]};

以下是nodejs部分代码

let parameter = ctx.request.body;
console.log('/accountRecord : post :openid='+ctx.session.vpOpenId +' : 提交的参数:'+JSON.stringify(parameter));
let _obj = {count:0,arr:[]};
let date = "";
let count = 0;
let result =await accountsBillData(ctx,parameter.num,10,ctx.session.indexTime);
if(result != null && result.billList.length > 0 && !result.msg){
    for(let i =0; i<result.billList.length;i++){
        let type = {0:result.billList[i].mchName+' 奖金', 1:'发红包', 2:'红包退回', 3:'推荐码红包入账', 4:'充值', 5:'提现', 6:'提现失败', 7:result.billList[i].mchName+' 购买礼遇',8:result.billList[i].mchName+' 奖金',9:result.billList[i].mchName+' 礼遇退款',10:result.billList[i].mchName+' 礼遇退款',11:'手续费'};
        let logo = {0:'4', 1:'1', 2:'1', 3:'1', 4:'6', 5:'2', 6:'1', 7:'3',8:'4',9:'5',10:'5',11:'7'};
        let _date2 = result.billList[i].date.substr(0,7);
        if(date == _date2){
            let obj = result.billList[i];
            let weekarr = getPtWeek(obj.date).split("|");
            obj.week = weekarr[0];//显示的星期
            obj.weekdate = weekarr[1];//显示月份和日期
            let data = {week:obj.week,weekdate:obj.weekdate,amount:obj.amount,
                balance:obj.balance,statusText:type[obj.sourceId],type:obj.type,logo:logo[obj.sourceId],status:obj.status};
            _obj.arr[_obj.arr.length-1].items.push(data);
            count++;
        }else {
            date = _date2;
            for(let j =0; j< result.monthAmount.length;j++){
                if(date == result.monthAmount[j].date){
                    let _date = new Date(result.monthAmount[j].date);
                    let curMonth = new Date().getMonth();
                    if(curMonth == _date.getMonth()){
                        _date = "本月";
                    }else{
                        _date = _date.getMonth()+1+"月";
                    }
                    let weekarr = getPtWeek(result.billList[i].date).split("|");
                    result.billList[i].week = weekarr[0];//显示的星期
                    result.billList[i].weekdate = weekarr[1];//显示月份和日期
                    let data = {week:result.billList[i].week,weekdate:result.billList[i].weekdate,amount:result.billList[i].amount,
                        balance:result.billList[i].balance,statusText:type[result.billList[i].sourceId],type:result.billList[i].type,logo:logo[result.billList[i].sourceId],status:result.billList[i].status};
                    let obj ={date:_date,income:result.monthAmount[j].income,expend:result.monthAmount[j].expend,items:[data]};
                    _obj.arr.push(obj);
                    count++;
                }
            }
        }
    }
}else if(result.msg){
    ctx.body = result.msg;
}
_obj.count = count;
console.log('/accountRecord : post :openid='+ctx.session.vpOpenId +' : 回传数据:'+JSON.stringify(_obj));
ctx.body = _obj;

页面部分代码

if (!data.msg) {//请求成功
    if(data.arr.length > 0){
        for (var i in data.arr){
            if(data.arr[i].date == vm.$data.date){
                vm.$data.series[vm.$data.series.length-1].items = vm.$data.series[vm.$data.series.length-1].items.concat(data.arr[i].items);
            }else {
                vm.$data.date=data.arr[i].date;
                var arr2 ={date:data.arr[i].date,income:data.arr[i].income,expend:data.arr[i].expend,items:data.arr[i].items};
                vm.$data.series.push(arr2);
            }
        }
    }
    if(data.count < 10){
        // 锁定
        me.lock('down');
        // 无数据
        me.noData();
        setTimeout(function(){
            $('.dropload-down').hide();
        },1000);
    }
    vm.num ++;
}

页面显示效果

接口返回数据Json格式处理第1张

作者:fozero
声明:原创文章,转载请注意出处!http://www.jianshu.com/p/e0ac1eb26ed2
标签:前端,js

免责声明:文章转载自《接口返回数据Json格式处理》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SVN代码行数统计centos6.4 安装wireless驱动下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

moment.js的使用方法总结

Moment.js是一个轻量级的JavaScript时间库,它方便了日常开发中对时间的操作,提高了开发效率。日常开发中,通常会对时间进行下面这几个操作:比如获取时间,设置时间,格式化时间,比较时间等等。下面就是我对moment.js使用过程中的整理,方便以后查阅。 一、引入moment.js 1.Node.js方式引入 (1)安装 npm install...

量化学习 | Tushare 基本面选股 (二)

量化投资比较重要的是策略,可是你得先选个好股,价值投资需要认同他的价值,值得投资的股票才有投资的机会,现在简单介绍一下基于基本面的选股,其实我现实生活中也有炒股,都是经验之说的选股原则。 首先从tushare中获取每日指标 pro.daily_basic last_year = '20190101' start_date = '20200313' myto...

MySql与Java的时间类型

MySql与Java的时间类型 MySql的时间类型有Java中与之对应的时间类型datejava.sql.Date Datetimejava.sql.Timestamp Timestampjava.sql.Timestamp Timejava.sql.Time Yearjava.sql.Date 对其进行分析参考MySql 的reference ma...

jmeter将响应结果中的Excel导出到本地

时间戳的命名方式避免出现导出记录重复而无法再次导出的现象 import java.io.*;import java.text.SimpleDateFormat;import java.util.Date; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");//设置日期格式S...

Linux date 命令

date命令用于打印或设置系统日期和时间,常见用法如下: [root@localhost ~]# date //查看当前时间 [root@localhost ~]# date +"%Y-%m-%d" //格式化输出 [root@localhost ~]# d...

MongoDB(6)- BSON 数据类型

BSON BSON是一种二进制序列化格式,用于在 MongoDB 中存储文档和进行远程过程调用 跟 JSON 的数据结构很像,但是支持更丰富的数据类型 数据类型 数据类型 序号 别名 备注 Double 1 double   String 2 string   Object 3 object   Array 4 array  ...