最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決json日期格式問題的3種方法

 更新時間:2014年02月02日 19:10:55   作者:  
這篇文章主要介紹了解決json日期格式問題的3種方法 ,需要的朋友可以參考下

開發(fā)中有時候需要從服務器端返回json格式的數(shù)據(jù),在后臺代碼中如果有DateTime類型的數(shù)據(jù)使用系統(tǒng)自帶的工具類序列化后將得到一個很長的數(shù)字表示日期數(shù)據(jù),如下所示:

復制代碼 代碼如下:

//設置服務器響應的結(jié)果為純文本格式
            context.Response.ContentType = "text/plain";
           //學生對象集合
            List<Student> students = new List<Student>
            {
                new Student(){Name ="Tom",
                    Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){Name ="Rose",
                    Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
                new Student(){Name ="Mark",
                    Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
            };

            //javascript序列化器
            JavaScriptSerializer jss=new JavaScriptSerializer();
           //序列化學生集合對象得到json字符
            string studentsJson=jss.Serialize(students);
           //將字符串響應到客戶端
            context.Response.Write(studentsJson);
           context.Response.End();

運行結(jié)果是:

其中Tom所對應生日“2014-01-31”變成了1391141532000,這其實是1970 年 1 月 1 日至今的毫秒數(shù);1391141532000/1000/60/60/24/365=44.11年,44+1970=2014年,按這種方法可以得出年月日時分秒和毫秒。這種格式是一種可行的表示形式但不是普通人可以看懂的友好格式,怎么讓這個格式變化?

解決辦法:

方法1:在服務器端將日期格式使用Select方法或LINQ表達式轉(zhuǎn)換后發(fā)到客戶端:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Web;

using System.Web.Script.Serialization;

namespace JsonDate1
{
    using System.Linq;

    /// <summary>
    /// 學生類,測試用
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public String Name { get; set; }

        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday { get; set; }
    }

    /// <summary>
    /// 返回學生集合的json字符
    /// </summary>
    public class GetJson : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //設置服務器響應的結(jié)果為純文本格式
            context.Response.ContentType = "text/plain";
            //學生對象集合
            List<Student> students = new List<Student>
            {
                new Student(){Name ="Tom",Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){Name ="Rose",Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
                new Student(){Name ="Mark",Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
            };

            //使用Select方法重新投影對象集合將Birthday屬性轉(zhuǎn)換成一個新的屬性
            //注意屬性變化后要重新命名,并立即執(zhí)行
            var studentSet =
                students.Select
                (
                p => new { p.Name, Birthday = p.Birthday.ToString("yyyy-mm-dd") }
                ).ToList();

            //javascript序列化器
            JavaScriptSerializer jss = new JavaScriptSerializer();
            //序列化學生集合對象得到json字符
            string studentsJson = jss.Serialize(studentSet);
            //將字符串響應到客戶端
            context.Response.Write(studentsJson);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


Select方法重新投影對象集合將Birthday屬性轉(zhuǎn)換成一個新的屬性,注意屬性變化后要重新命名,屬性名可以相同;這里可以使用select方法也可以使用LINQ查詢表達式,也可以選擇別的方式達到相同的目的;這種辦法可以將集合中客戶端不用的屬性剔除,達到簡單優(yōu)化性能的目的。

運行結(jié)果:

這時候的日期格式就已經(jīng)變成友好格式了,不過在javascript中這只是一個字符串。

方法二:

在javascript中將"Birthday":"\/Date(1391141532000)\/"中的字符串轉(zhuǎn)換成javascript中的日期對象,可以將Birthday這個Key所對應的Value中的非數(shù)字字符以替換的方式刪除,到到一個數(shù)字1391141532000,然后實例化一個Date對象,將1391141532000毫秒作為參數(shù),得到一個javascript中的日期對象,代碼如下:

復制代碼 代碼如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>json日期格式處理</title>
    <script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {
            $.getJSON("getJson.ashx", function (students) {
                $.each(students, function (index, obj) {
                    $("<li/>").html(obj.Name).appendTo("#ulStudents");

                    //使用正則表達式將生日屬性中的非數(shù)字(\D)刪除
                    //并把得到的毫秒數(shù)轉(zhuǎn)換成數(shù)字類型
                    var birthdayMilliseconds = parseInt(obj.Birthday.replace(/\D/igm, ""));
                    //實例化一個新的日期格式,使用1970 年 1 月 1 日至今的毫秒數(shù)為參數(shù)
                    var birthday = new Date(birthdayMilliseconds);

                    $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents"); ;
                });
            });
        });
    </script>
</head>
<body>
    <h2>json日期格式處理</h2>
    <ul id="ulStudents">
    </ul>
</body>
</html>

運行結(jié)果:

上的使用正則/\D/igm達到替換所有非數(shù)字的目的,\D表示非數(shù)字,igm是參數(shù),分別表示忽視(ignore)大小寫;多次、全局(global)替換;多行替換(multi-line);有一些時候還會出現(xiàn)+86的情況,只需要變換正則同樣可以達到目的。另外如果項目中反復出現(xiàn)這種需要處理日期格式的問題,可以擴展一個javascript方法,代碼如下:

復制代碼 代碼如下:

$(function () {
            $.getJSON("getJson.ashx", function (students) {
                $.each(students, function (index, obj) {
                  $("<li/>").html(obj.Name).appendTo("#ulStudents");

                  //使用正則表達式將生日屬性中的非數(shù)字(\D)刪除
                    //并把得到的毫秒數(shù)轉(zhuǎn)換成數(shù)字類型
                    var birthdayMilliseconds = parseInt(obj.Birthday.replace(/\D/igm, ""));
                  //實例化一個新的日期格式,使用1970 年 1 月 1 日至今的毫秒數(shù)為參數(shù)
                    var birthday = new Date(birthdayMilliseconds);

                  $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents");
                  $("<li/>").html(obj.Birthday.toDate()).appendTo("#ulStudents");
                });
            });
        });

        //在String對象中擴展一個toDate方法,可以根據(jù)要求完善
        String.prototype.toDate = function () {
            var dateMilliseconds;
            if (isNaN(this)) {
                //使用正則表達式將日期屬性中的非數(shù)字(\D)刪除
                dateMilliseconds =this.replace(/\D/igm, "");
            } else {
                dateMilliseconds=this;
            }
            //實例化一個新的日期格式,使用1970 年 1 月 1 日至今的毫秒數(shù)為參數(shù)
            return new Date(parseInt(dateMilliseconds));
        };

上面擴展的方法toDate不一定合理,也不夠強大,可以根據(jù)需要修改。

方法三:

可以選擇一些第三方的json工具類,其中不乏有一些已經(jīng)對日期格式問題已處理好了的,常見的json序列化與反序列化工具庫有:

1.fastJSON.
2.JSON_checker.
3.Jayrock.
4.Json.NET - LINQ to JSON.
5.LitJSON.
6.JSON for .NET.
7.JsonFx.
8.JSONSharp.
9.JsonExSerializer.
10.fluent-json
11.Manatee Json

這里以litjson為序列化與反序列化json的工具類作示例,代碼如下:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Web;

using LitJson;

namespace JsonDate2
{
    using System.Linq;

    /// <summary>
    /// 學生類,測試用
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public String Name { get; set; }

        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday { get; set; }
    }

    /// <summary>
    /// 返回學生集合的json字符
    /// </summary>
    public class GetJson : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            //設置服務器響應的結(jié)果為純文本格式
            context.Response.ContentType = "text/plain";
            //學生對象集合
            List<Student> students = new List<Student>
            {
                new Student(){Name ="Tom",Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){Name ="Rose",Birthday =Convert.ToDateTime("2014-01-10 11:12:12")},
                new Student(){Name ="Mark",Birthday =Convert.ToDateTime("2014-01-09 10:12:12")}
            };

            //序列化學生集合對象得到json字符
            string studentsJson = JsonMapper.ToJson(students);
            //將字符串響應到客戶端
            context.Response.Write(studentsJson);
            context.Response.End();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

運行結(jié)果如下:

這時候的日期格式就基本正確了,只要在javascript中直接實例化日期就好了,

var date = new Date("01/31/2014 12:12:12");
alert(date.toLocaleString());

客戶端的代碼如下:

復制代碼 代碼如下:

$(function () {
            $.getJSON("GetJson2.ashx", function (students) {
                $.each(students, function (index, obj) {
                    $("<li/>").html(obj.Name).appendTo("#ulStudents");

                    var birthday = new Date(obj.Birthday);
                    $("<li/>").html(birthday.toLocaleString()).appendTo("#ulStudents");
                });
            });
        });

        var date = new Date("01/31/2014 12:12:12");
        alert(date.toLocaleString());

這里講到了三種解決json中序列化后的日期格式問題,應該還有更好更完善的方法,歡迎您告訴我。因為有很多學生問我所以我寫了這點文字,歡迎批評指正。

示例代碼下載

相關文章

  • json跟xml的對比分析

    json跟xml的對比分析

    JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規(guī)范的標簽形式,很難分出勝負。
    2008-06-06
  • 把普通對象轉(zhuǎn)換成json格式的對象的簡單實例

    把普通對象轉(zhuǎn)換成json格式的對象的簡單實例

    下面小編就為大家?guī)硪黄哑胀▽ο筠D(zhuǎn)換成json格式的對象的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 將nodejs打包工具整合到鼠標右鍵的方法

    將nodejs打包工具整合到鼠標右鍵的方法

    昨天放出了主要的nodejs打包代碼(《nodejs寫的簡單項目打包工具》),今天放出整合到鼠標右鍵的代碼,打包需要配置環(huán)境變量,添加NODE_PATH為node安裝路徑
    2013-05-05
  • 深入分析jsonp協(xié)議原理

    深入分析jsonp協(xié)議原理

    JSONP的最基本的原理是:動態(tài)添加一個<script>標簽,而script標簽的src屬性是沒有跨域的限制的。這樣說來,這種跨域方式其實與ajax XmlHttpRequest協(xié)議無關了。
    2015-09-09
  • 任意Json轉(zhuǎn)成無序列表的方法示例

    任意Json轉(zhuǎn)成無序列表的方法示例

    這篇文章主要給大家介紹了任意Json如何轉(zhuǎn)成無序列表,文中給出了詳細的示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友們下面跟著小編來一起學習學習吧。
    2016-12-12
  • JSON 和 JavaScript eval使用說明

    JSON 和 JavaScript eval使用說明

    JSON (JavaScript Object Notation) 一種輕量級的數(shù)據(jù)交換格式,比 XML 更輕巧,JSON 是JavaScript 原生格式,這意味著 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何 API 和工具包。
    2010-06-06
  • 快速解決處理后臺返回json數(shù)據(jù)格式的問題

    快速解決處理后臺返回json數(shù)據(jù)格式的問題

    今天小編就為大家分享一篇快速解決處理后臺返回json數(shù)據(jù)格式的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • JSON 入門指南 想了解json的朋友可以看下

    JSON 入門指南 想了解json的朋友可以看下

    JSON 即 JavaScript Object Natation,它是一種輕量級的數(shù)據(jù)交換格式,非常適合于服務器與 JavaScript 的交互。本文將快速講解 JSON 格式,并通過代碼示例演示如何分別在客戶端和服務器端進行 JSON 格式數(shù)據(jù)的處理。
    2009-08-08
  • 告訴大家什么是JSON

    告訴大家什么是JSON

    JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。
    2008-06-06
  • js解析與序列化json數(shù)據(jù)(三)json的解析探討

    js解析與序列化json數(shù)據(jù)(三)json的解析探討

    這一節(jié)我們主要討論json的解析,感興趣的朋友可以了解下,JSON.parse()方法也可以接收另一個參數(shù),該參數(shù)是一個函數(shù),將早每個鍵值對上調(diào)用,好了,話不多說,希望本文對你有所幫助
    2013-02-02

最新評論

偃师市| 德清县| 金华市| 新密市| 弥勒县| 四平市| 白城市| 视频| 象山县| 正定县| 尉氏县| 循化| 浑源县| 西乌珠穆沁旗| 天长市| 曲阜市| 三穗县| 万州区| 响水县| 五家渠市| 玉林市| 仲巴县| 沧州市| 万源市| 武清区| 横峰县| 海淀区| 孟津县| 普宁市| 武清区| 霍城县| 治县。| 积石山| 柏乡县| 修水县| 商丘市| 金昌市| 喀什市| 河北区| 阿克陶县| 陈巴尔虎旗|