用js构建Json应用经典实例教程

     最近老用这个xml+js解析数据觉得用起来很不好,效率太低不说,代码的复杂度越来越高,就像一个胖子一样,不灵活,换个Json试一下,OK,挺好,多搞点数据,发现原来json还是真的应该尽早被我用来+js啊,呵呵,普通web应用果然应该采用Json来代替xml,不说了,给出教程吧

O(∩_∩)O~

 

     现在我想做的这个实例,以一个文件构造json格式数据,通过jQuery ajax请求将其解析,然后填充Web页面内容。

     1. 构造json格式数据并不是一件容易的事情,对于不是熟手的人来说,这里我需要用到一些Asp.net方面的知识来构造我的json数据,以响应请求,如果不熟悉Asp.net将可跳过该环节,我将在本节最后贴出生成的数据源,由于我想利用现有的代码,并充分运用实战技巧,所以该段代码有一点复杂,这里将综合个例,数据库中存在表:TabHOrder,记录用户的历史订单,如下图所示:

     

 

与一般性程序架构相同,程序中构造了一个与表相对应的实体类,实体类中的字段名就是表列名,实体类名称与表名相同,这里对该表的相关数据库访问代码及方法就省略了,特别提一下GetHOrderByTime这个方法,该方法用于查询在一定时间范围内相关用户的历史订单 ,

好了,简单的说明完了,建立一个HOrderResponse.ashx文件,给出ProcessRequest()代码如下:

        context.Response.Clear();
         context.Response.Buffer = true;
         context.Response.ContentType = "application/json";
         context.Response.ContentEncoding.GetBytes("utf-8");

 

         //开始时间
         String beginTime = Convert.ToString(context.Request.Form["beginTime"]);
         beginTime = String.IsNullOrEmpty(beginTime) ? DateTime.Now.ToString("yyyy-MM-dd") : beginTime;
         //结束时间
         String endTime = Convert.ToString(context.Request.Form["endTime"]);
         endTime = String.IsNullOrEmpty(endTime) ? DateTime.Now.AddDays(1).ToString("yyyy-MM-dd") : endTime;

         string mCode = Convert.ToString(context.Request.Form["mCode"]);
         //获取查询结果
         List<Model.Trade.TabHOrder> list =
                new YXShop.BLL.Trade.TabHOrder().GetHOrderByTime(Convert.ToInt32(memberId), mCode,  Convert.ToDateTime(beginTime), Convert.ToDateTime(endTime));
         //获取json数据
         String json = this.ConvertToJson(list);

         //确保垃圾回收

         list = null;

         //响应数据流
         context.Response.Write(json);
         context.Response.Flush();
         context.Response.End();

 

ConvertToJson方法代码如下:

 

        /// <summary>
        /// 转换为Json格式数据
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public String ConvertToJson(List<Model.Trade.TabHOrder> list)
        {
            String jsonStr = "{rows:[";
            string mCode = null;//标志订单商品是否相同
            int pre = 0;//标志商品的精度
            for (int i = 0; i < list.Count(); i++)
            {
                Model.Trade.TabHOrder item = list[i];
                double profit = (double)(item.HProfit / (double)100);
                if (mCode != item.HOMCode)
                {
                    mCode = item.HOMCode;

                    //获取产品精度
                    pre = Convert.ToInt16(OtherBLL.SelectByWhere("MPrecision", "where MMcode='" + item.HOMCode.Trim() + "'", "TabMer", "").Rows[0][0].ToString());
                }
                jsonStr += "{cell:[/"" + item.HOid + "/",/""
                    + item.HOMCode + "/",/"" + item.HOType + "/",/"" + item.HONum + "/",/""
                    + item.HODTime + "/",/"" + item.HODPrice.ToString("f"+ pre) + "/",/"" + item.HOLossP.ToString("f"+pre) + "/",/""
                    + item.HOProfitP.ToString("f"+pre) + "/",/"" + item.HODealType + "/",/"" + Convert.ToDouble((double)item.HOAccrual / (double)100).ToString("f2") + "/",/""
                    + Convert.ToDouble((double)item.HODealCost / (double)100).ToString("f2") + "/",/"" + item.HOBgPrice.ToString("f"+pre) + "/",/""
                    + item.HOBgTime + "/",/"" + item.HOBgType + "/",/""
                    + profit.ToString("f2") + "/"]}";
                if (i != list.Count() - 1)
                {
                    jsonStr += ",";
                }
            }
            jsonStr += "],goods:[";
            //设置统计信息
            List<String> codeList = list.Select(p => p.HOMCode).ToList();
            List<String> disCodeList = codeList.Distinct().ToList();
            for (int i = 0; i < disCodeList.Count(); i++)
            {
                //无重复商品名称
                jsonStr += "{good:[/"" + disCodeList[i] + "/",/"";
                //统计每种商品的买进总和
                jsonStr += (from q in list where q.HOMCode == disCodeList[i] && q.HOType.Equals("Buy", StringComparison.CurrentCultureIgnoreCase) select (int)q.HONum).Sum() + "/",/"";
                //统计每种商品的买出总和
                jsonStr += (from q in list where q.HOMCode == disCodeList[i] && q.HOType.Equals("Sell", StringComparison.CurrentCultureIgnoreCase) select (int)q.HONum).Sum() + "/",/"";
                //统计获利
                double profit = (from q in list where q.HOMCode == disCodeList[i] select (int)q.HProfit).Sum() / (double)100;
                jsonStr += profit.ToString("f2") + "元/"]}";
                if (i != disCodeList.Count() - 1)
                {
                    jsonStr += ",";
                }
            }
            jsonStr += "]}";

 

            //确保垃圾回收

            codeList = null;

            disCodeList = null;
            return jsonStr;
        }

        

 

 

那么我不会讲解我为什么要这么做,现在我讲解下我是如何构造这个json数据的,

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值