JSON 날짜 형식 문제를 해결하는 3가지 방법_json

WBOY
풀어 주다: 2016-05-16 17:01:38
원래의
1363명이 탐색했습니다.

개발 중에 서버에서 json 형식의 데이터를 반환해야 하는 경우가 있습니다. 백그라운드 코드에 DateTime 유형의 데이터가 있는 경우 시스템 자체 도구 클래스를 사용하여 이를 직렬화하면 날짜를 나타내는 긴 숫자를 얻게 됩니다. 데이터는 다음과 같습니다. 표시:

코드 복사 코드는 다음과 같습니다.

//서버 응답 결과를 일반으로 설정 텍스트 형식
context.Response.ContentType = "text/plain";
//학생 개체 컬렉션
List 학생 = new List
{
             new Student() {이름 = "톰",
생일 =Convert.ToDateTime("2014-01-31 12:12:12")},
new Student(){이름 ="로즈",
생일 = Convert.ToDateTime ("2014-01-10 11:12:12")},
new Student(){Name ="Mark",
Birthday =Convert.ToDateTime("2014-01-09 10: 12:12 ")}
           };

//javascript serializer
JavaScriptSerializer jss=new JavaScriptSerializer();
//학생 컬렉션 개체를 직렬화하여 json 문자 가져오기
string StudentsJson=jss.Serialize(students);
             / / 클라이언트에 문자열 응답
context.Response.Write(studentsJson);
context.Response.End();

실행 결과는 다음과 같습니다.

Tom의 해당 생일 "2014-01-31"은 1391141532000이 되었습니다. 이는 실제로 1970년 1월 1일부터 현재까지의 밀리초 수입니다. 1391141532000/1000/60/60/24/365=44.11년, 44 1970년 =2014, 이 방법에 따르면 연도, 월, 일, 시, 분, 초 및 밀리초를 얻을 수 있습니다. 이 형식은 실현 가능한 표현이지만 일반 사람들이 이해할 수 있는 친숙한 형식은 아닙니다. 이 형식을 어떻게 변경합니까?

해결책:

방법 1: 서버측에서 Select 메서드나 LINQ 표현식을 사용하여 날짜 형식을 변환하고 클라이언트로 보냅니다.

코드 복사 코드는 다음과 같습니다.

시스템 사용;
System.Collections.Generic 사용;
System.Web 사용;

System.Web.Script.Serialization 사용

네임스페이스 JsonDate1
{
    System.Linq 사용;

    ///


    /// school生类,测试用
    ///

    공개 수업 학생
    {
        /// < summary>
        /// 이름
        ///
        public String Name { get; 세트; }

        ///


        /// 生日
        ///

        public DateTime Birthday { get; 세트; }
    }

    ///


    /// 返回school生集합적json字符
    ///

    공개 클래스 GetJson : IHttpHandler
    {
        public void ProcessRequest(HttpContext 컨텍스트)
        {
            //设置服务器响应的结果为纯文本格式
            context.Response.ContentType = "text/plain";
            //school生对象集합
            목록< ;학생> 학생 = New List & lt; Student & gt; { new student () {name = "tom", 생일 = convert.todateTime ( "2014-01-31 12:12:12"), 학생(){이름 ="로즈",생일 =Convert.ToDateTime("2014-01-10 11:12:12")},
               new Student(){이름 ="마크",생일 =Convert.ToDateTime ("2014-01-09 10:12:12")}
            };

            //선택 방법을 선택하여 새로운 버전을 선택하세요.

           //执行

            var StudentSet =
                학생.선택
               (
                p => new { p.Name, Birthday = p.Birthday.ToString("yyyy-mm-dd") }
               ).ToList();

            //javascript序列化器

            JavaScriptSerializer jss = new JavaScriptSerializer();

           //序列화학생集合对象得到json字符
            문자열 StudentsJson = jss.Serialize(studentSet);
            / /将字符串响应到客户端
            context.Response.Write(studentsJson);
            context.Response.End();
        }
>    }
    }

}



Select 메서드는 개체 컬렉션을 다시 투영하고 Birthday 특성을 새 특성으로 변환합니다. 특성이 변경된 후에는 특성 이름을 바꿔야 합니다. 여기서는 select 메서드나 LINQ를 사용할 수 있습니다. 쿼리 표현식을 사용하거나 다른 것을 선택할 수 있습니다. 이 방법은 동일한 목적을 달성하며 단순히 성능 최적화라는 목적을 달성하기 위해 컬렉션에서 클라이언트가 사용하지 않는 속성을 제거할 수 있습니다.

실행 결과:

현재 날짜 형식은 친숙한 형식이 되었지만 JavaScript에서는 이는 단지 문자열일 뿐입니다.

방법 2:

"Birthday":"/Date(1391141532000)/"의 문자열을 자바스크립트의 날짜 객체로 변환합니다. 생일 키에 해당하는 값에서 숫자가 아닌 문자를 숫자로 바꾸어 삭제할 수 있습니다. 1391141532000, 그런 다음 1391141532000 밀리초를 매개변수로 사용하여 Date 객체를 인스턴스화하여 javascript에서 날짜 객체를 가져옵니다. 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.




json 날짜 형식 처리




json 날짜 형식 처리

     







실행 결과:



숫자가 아닌 모든 숫자를 바꾸려면
에서 일반 /D/igm을 사용하세요. D는 숫자가 아닌 숫자를 의미하고, igm은 각각 대문자와 소문자 무시, 전역(전역) 치환을 의미합니다. -line replacement ( multi-line); 때로는 86의 상황이 있을 수 있는데, 이는 단순히 정규식을 변경함으로써 목적을 달성할 수 있습니다. 또한 프로젝트에서 날짜 형식을 처리해야 하는 문제가 반복적으로 발생하는 경우 다음 코드를 사용하여 javascript 메서드를 확장할 수 있습니다.

코드 복사

코드는 다음과 같습니다.


$(함수 () {
                                                          ("
  • ").html(obj.Name).appendTo("#ulS 학생");

                                                                                                                                                        장소(/ D/igm, "");                $("
  • ").html(birthday.toLocaleString()).appendTo("#ulStudents");

                       $("

  • ").html(obj .Birthday.toDate()).appendTo("#ulStudents");
                                       ;
    //요구 사항에 따라 개선될 수 있는 String 객체의 toDate 메서드 확장
    String.prototype.toDate = function () {
    var dateMilliseconds;

    if (isNaN(this)) { this;


    위의 확장된 방법인 toDate는 합리적이지 않거나 강력하지 않을 수 있으며 필요에 따라 수정할 수 있습니다.

    방법 3:

    일부 타사 json 도구 클래스를 선택할 수 있으며, 그 중 다수는 이미 날짜 형식 문제를 처리했습니다. 일반적인 json 직렬화 및 역직렬화 도구 라이브러리는 다음과 같습니다.


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

  • JSON을 직렬화 및 역직렬화하기 위한 도구 클래스의 예인 litjson은 다음과 같습니다.

    코드 복사


    코드는 다음과 같습니다.


    시스템 사용;
    System.Collections.Generic 사용;
    System.Web 사용;

    LitJson 사용

    JsonDate2 네임스페이스
    {
    System.Linq 사용;

    ///


    /// 테스트에 사용되는 학생 클래스
    ///

    공개 클래스 Student
    {
    /// < ; 요약>
    /// 이름

    ///

    ///


    /// 학생 컬렉션의 json 문자를 반환합니다.
    ///

    public class GetJson: IHttpHandler
    {

    public void ProcessRequest (httpcontext context)

    {
    // 서버 응답 결과를 순수 텍스트 형식으로 설정
    context.Response.contenttype = "text/plain" ;Student> ;학생>
    {
    new Student(){Name ="Tom",Birthday =Convert.ToDateTime("2014-01-31 12:12:12")},
                new Student(){ 이름 ="장미",생일 =Convert.ToDateTime("2014-01-10 11:12:12")},
                   새 학생(){이름 ="마크", 생일 = Convert.ToDateTime("2014- 01-09 10:12:12")}
                  };

                //序列chemical生集合对象得到json字符
                string StudentsJson = JsonMapper.ToJson(students);
                //将    客户端
                context.Response.Write(studentsJson);
    context.Response.End();
    }

    public bool IsReusable

    {
    get
    {
    return false;
    }
    }

    }

    }



    실행 결과는 다음과 같습니다.




    현재 날짜 형식은 기본적으로 정확합니다. 자바스크립트에서 직접 날짜를 인스턴스화하면 됩니다.

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

    alert(date.toLocaleString()); 클라이언트 코드는 다음과 같습니다.


    코드 복사

    코드는 다음과 같습니다.

    $ (fuins () {
    $ .getjson ("getjson2.ASHX", function (students) {
    $ .Each (Students, Function (INDEX, OBJ) {
    $ > ("
  • ").html(obj.Name).appendTo("#ulStudents");
    var birthday = new Date(obj.Birthday);

    $("

  • ").html(birthday.toLocaleString()).appendTo("#ulStudents");
    } );
             });
            });

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

    Alert(date.toLocaleString());

  • JSON에서 직렬화한 후 날짜 형식 문제를 해결하는 세 가지 방법이 있습니다. 더 좋고 완전한 방법이 있으면 알려주세요. 많은 학생들이 저에게 질문을 해서 이렇게 글을 썼습니다. 비판과 수정을 환영합니다.

    샘플 코드 다운로드

    관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!