Jayrock 의 제 이 슨 전환 활용

32319 단어 json

1. 소개 와 인 스 턴 스
Jayrock 은 마이크로소프트 ASP. NET 프레임 워 크 를 지원 하 는 JSON 과 JSON - RPC 를 구현 한 LGPL 의 오픈 소스 소프트웨어 다.
JSON+Jayrock+ASP.NET Quick Start :http://jayrock.berlios.de/#quick-start
JavaScript 와. NET 의 JavaScript Object Notation (JSON) 소개
특징: 간단 한 포맷 데이터 교환 2, 쉽게 읽 기 및 쓰기 습관 3, 기계 적 분석 및 실행 4, JavaScript 에서 eval () 방법 을 사용 하면 JSON 데이터 5, JSON 이 지원 하 는 언어 ActionScript, C, C \ #, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua 를 쉽게 읽 을 수 있 습 니 다.
 
다운로드 주소:http://developer.berlios.de/project/showfiles.php?group_id=4638
실례 는 다음 과 같다.
 
실체 클래스 User. cs:
public class User

{

 public User()

 {

  //

  // TODO:            

  //

 }



    private int id;



    public int Id

    {

        get { return id; }

        set { id = value; }

    }

    private string name;



    public string Name

    {

        get { return name; }

        set { name = value; }

    }

    private DateTime time;



    public DateTime Time

    {

        get { return time; }

        set { time = value; }

    }

    private double money;



    public double Money

    {

        get { return money; }

        set { money = value; }

    }

    private string[] str;



    public string[] Str

    {

        get { return str; }

        set { str = value; }

    }

}

페이지 배경 기능:
  • 실 체 를 JSON 으로 전환: 
    User user = new User();
    
            user.Id = 1;
    
            user.Name = " ";
    
            user.Money = 2.3;
    
            user.Time = DateTime.Now;
    
            user.Str = new string[] { "1", "2", "3" };
    
            Jayrock.Json.JsonTextWriter writer = new Jayrock.Json.JsonTextWriter();
    
            Jayrock.Json.Conversion.JsonConvert.Export(user, writer);
    
            string str = writer.ToString();
    
           //str  {"id":1,"name":" ","time":"2009-04-14T14:29:29.4375000+08:00","money":2.3,"str":["1","2","3"]}

    JSON 이 실체 로 전환:
    string str = "{\"id\":1,\"name\":\" \",\"time\":\"2009-04-13T22:21:11.6562500+08:00\",\"money\":2.3,\"str\":[\"1\",\"2\",\"3\"]}";
    
      User user = (User)Jayrock.Json.Conversion.JsonConvert.Import(typeof(User), str);

    배열 을 JSON 으로 바 꾸 기:
    Jayrock.Json.JsonTextWriter writer = new Jayrock.Json.JsonTextWriter();
    
            writer.WriteStartArray();
    
            writer.WriteString("1");
    
            writer.WriteString("a");
    
            writer.WriteString("3");
    
            writer.WriteEndArray();
    
            string str = writer.ToString();//str : ["1","a","3"]

    실 체 를 JSON 으로 바 꾸 기:
    Jayrock.Json.JsonTextWriter writer = new Jayrock.Json.JsonTextWriter();
    
            writer.WriteStartObject();
    
            writer.WriteMember("WID");//   
    
            writer.WriteNumber(11);
    
            writer.WriteMember("Date");//   
    
            writer.WriteString(DateTime.Now.ToString());
    
            writer.WriteEndObject();
    
           string str = writer.ToString();//str : ["1","a","3"]

    JSON 획득 속성:
    string str = "{\"WID\":11,\"Date\":\"2009-4-14 14:02:42\"}";
    
            Jayrock.Json.JsonTextReader reader = new Jayrock.Json.JsonTextReader(new StringReader(str));
    
            while (reader.Read())
    
            {
    
                if (reader.TokenClass == JsonTokenClass.String || reader.TokenClass == JsonTokenClass.Number)
    
                {
    
                    this.Label9.Text = this.Label9.Text + "," + reader.Text;
    
                }
    
            }
    
    //  :11,2009-4-14 14:02:42 

    주:
    {"id":1,"name":" ","time":"2009-04-14T14:29:29.4375000+08:00","money":2.3,"str":["1","2","3"]}  JSON           :"2009-04-14T14:29:29.4375000+08:00",             :
    
    
    
     <script type="text/javascript" src="JS/json2.js"></script> //  json JS  
    
    
    
    //"2009-04-13T22:21:11.6562500+08:00"        
    
    function getOtherTime(data)
    
    {
    
    var str =  data.split(".")[0].replace(/T/g,   "   ");   
    
    var da = parseDate(str);
    
    return da.getFullYear()+" "+ (da.getMonth()+1)+" " +da.getDate()+" " +da.getHours()+":"+da.getMinutes()+":"+da.getSeconds();
    
    }
    
    
    
    
    
    
    
    
    
    
    
    /*  
    
       String     Date  .  
    
      parseDate('2006-1-1') return new Date(2006,0,1)  
    
      parseDate(' 2006-1-1 ') return new Date(2006,0,1)  
    
      parseDate('2006-1-1 15:14:16') return new Date(2006,0,1,15,14,16)  
    
      parseDate(' 2006-1-1 15:14:16 ') return new Date(2006,0,1,15,14,16);  
    
      parseDate('2006-1-1 15:14:16.254') return new Date(2006,0,1,15,14,16,254)  
    
      parseDate(' 2006-1-1 15:14:16.254 ') return new Date(2006,0,1,15,14,16,254)  
    
      parseDate('      ') retrun null  
    
    */  
    
    function parseDate(str){   
    
      if(typeof str == 'string'){   
    
        var results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) *$/);   
    
        if(results && results.length>3)   
    
          return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]));    
    
        results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2}) *$/);   
    
        if(results && results.length>6)   
    
          return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]));    
    
        results = str.match(/^ *(\d{4})-(\d{1,2})-(\d{1,2}) +(\d{1,2}):(\d{1,2}):(\d{1,2})\.(\d{1,9}) *$/);   
    
        if(results && results.length>7)   
    
          return new Date(parseInt(results[1]),parseInt(results[2]) -1,parseInt(results[3]),parseInt(results[4]),parseInt(results[5]),parseInt(results[6]),parseInt(results[7]));    
    
      }   
    
      return null;   
    
    }   
    
      
    
    /*  
    
       Date/String  ,   String  .  
    
        String  ,     Date    
    
          Date,   ''  
    
             0,   ,       .  
    
    */  
    
    function formatDate(v){   
    
      if(typeof v == 'string') v = parseDate(v);   
    
      if(v instanceof Date){   
    
        var y = v.getFullYear();   
    
        var m = v.getMonth() + 1;   
    
        var d = v.getDate();   
    
        var h = v.getHours();   
    
        var i = v.getMinutes();   
    
        var s = v.getSeconds();   
    
        var ms = v.getMilliseconds();      
    
        if(ms>0) return y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s + '.' + ms;   
    
        if(h>0 || i>0 || s>0) return y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s;   
    
        return y + '-' + m + '-' + d;   
    
      }   
    
      return '';   
    
    }  

    2. 제 이 슨 과 클래스 의 상호 전환 1. 제 이 슨 Object 전환 모델 - js 는 제 이 슨 대상 이 백 스테이지 업무 류 에 전달 되 고 백 스테이지 에서 받 은 후에 데이터 모델 로 전환 합 니 다.
        Json Object = { 'KId':1, 'IndexDirectory':‘c:\root’}
        변환 방법:
    KdgPointData kpd = (KdgPointData)JsonConvert.Import(typeof(KdgPointData), jsonObject.ToString());

    KdgPointData 는 데이터 모델 류 입 니 다. JSonConvert 대상 을 사용 하려 면 두 개의 동적 링크 라 이브 러 리 (주 소 는 글 부록 참조) 를 참조 하고 추가 해 야 합 니 다. using Jayrock. JSon. Convert;
        Import () 방법 은 5 번 을 다시 불 러 왔 습 니 다. 여기 서 사용 하 는 것 은 첫 번 째 매개 변 수 는 바 꾸 고 싶 은 유형 이 고 두 번 째 매개 변 수 는 json object 가 string 으로 전 환 된 결과 입 니 다.
        메모: 배경 에서 js 대상 을 받 으 면 모두 object 로 받 습 니 다. 즉, 위의 jsonObject 는 c \ # 방법 류 에서 object 대상 이 고 전환 한 후에 야 model 입 니 다.또한 jsonObject 에서 요소 의 개 수 는 key 의 대소 문 자 는 Model 의 속성 과 계속 유지 해 야 합 니 다.
        2. Model 에서 JSon Object 로 전환 합 니 다. 이것 은 바 꿀 필요 가 없습니다. Model 이나 Model [] 를 방법의 반환 유형 으로 하고 js 에서 받 은 후에 해당 하 는 JSonReader 를 정의 하면 됩 니 다.
        Ext. data. store 에서 proxy 속성 을 사용 하고 url 을 정의 했다 면 Jayrock 은 Model 을 json 형식 문자열 로 바 꾸 는 방법 이 있 습 니 다.
    string temp = JsonConvert.ExportToString(model);

    그리고 Response. Write (temp);Response.End();   이 url 을 요청 하면 JSon 데 이 터 를 얻 을 수 있 습 니 다.
        3. DataTable 에서 JSon Object 로 전환 하 는 방법 은 두 가지 가 있 습 니 다. 하 나 는 DataTable 을 Model 또는 Model [] 로 바 꾸 고 두 번 째 방식 으로 전환 하거나 제 이 슨 문자열 을 맞 추 는 방법 을 쓰 는 것 입 니 다.
    /// <summary> DataTable        json       </summary>
    
            /// <param name="tableSource">       </param>
    
            /// <param name="fields">          </param>
    
            /// <returns></returns>
    
            public string DataTableToJson(DataTable tableSource, string[] fields)
    
             {
    
                string jsonData = "{'totalCount':" + tableSource.Rows.Count + ",'root':[";
    
    
    
                if (tableSource.Rows.Count > 0)
    
                 {
    
                    foreach (DataRow row in tableSource.Rows)
    
                     {
    
                         jsonData += "{";
    
                        for (int i = 0; i < fields.Length; i++)
    
                             jsonData += "'" + fields[i] + "':'" + row[fields[i]] + "',";
    
                         jsonData = jsonData.Substring(0, jsonData.Length - 1);
    
                         jsonData += "},";
    
                     }
    
                     jsonData = jsonData.Substring(0, jsonData.Length - 1);
    
                     jsonData += "]}";
    
                 }
    
                else
    
                 {
    
                     jsonData += "]}";
    
                 }
    
    
    
                return jsonData;
    
             }

    패키지
    {
    
    
    
            totalCount : 6,
    
    
    
            root : [
    
    
    
                {'id' : 1, 'name' : 'lislie' }, { 'id' : 2, 'name' : 'Mark' }...
    
    
    
            ]
    
    
    
        }

    사용 방법:
    string temp = DataTableToJson(dt, {"id", "name"});

    3. json 2. js 의 사용 소개
     
     
     자 바스 크 립 트 는 ECMAScript 언어 규범 제3 판 을 사용 하여 표준화 되 었 다.JSON 은 JavaScript 대상 문법 을 위 한 키 집합 입 니 다.JSON 은 자 바스 크 립 트 의 하위 집합 이기 때문에 이 언어 에 사용 된다.var myJSONObject = {"bindings": [{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"]}; 위의 예제 에 서 는 단독 구성원 'bindings' 를 포함 하 는 대상 을 만 들 었 습 니 다. 이 구성원 은 세 개의 대상 ("ircEvent", "method", "regex") 을 포함 하 는 배열 의 구성원 을 통 해 구성원 이 통과 하거나 아래 표 조작 자 를 검색 하거나 아래 표 조작 자 를 검색 할 수 있 습 니 다. my JSONobject. bings [0]. method / / "new URI"
    1. eval () 함수 사용:
    JSON 텍스트 를 대상 으로 변환 하기 위해 서 는 텍스트 를 대상 으로 변환 할 수 있 으 며, eval () 함 수 를 사용 하여 JavaScript 편집 기 를 호출 할 수 있 습 니 다. JSON 은 JavaScript 의 부분 집합 이기 때문에 컴 파 일 러 는 텍스트 를 정확하게 해석 하고 대상 구 조 를 만 듭 니 다. 텍스트 는 괄호 안에 묶 어서 JavaScript 의 문법 적 오류 가 발생 하지 않도록 해 야 합 니 다. var my Object = eval ('+ my JSONtext +'))); eval 함 수 는 매우 빠 릅 니 다. 자 바스 크 립 트 프로그램 을 컴 파일 할 수 있어 보안 에 문제 가 생 겼 습 니 다. 신뢰 할 수 있 고 완벽 한 소스 코드 를 사용 할 때 만 eval 함 수 를 사용 할 수 있 습 니 다. JSON 해석 기 를 더 안전하게 사용 할 수 있 습 니 다. XML HttpRequest 웹 애플 리 케 이 션 을 사용 하면 페이지 간 통신 이 같은 소스 만 허용 되 므 로 신뢰 할 수 있 습 니 다. 그러나 이것 은 완벽 한 것 이 아 닙 니 다.. 서버 에 엄격 한 JSON 인 코딩 이 없 거나 엄격 한 입력 검증 이 없 으 면 위험한 스 크 립 트 를 포함 한 잘못된 JSON 텍스트 를 전송 할 수 있 습 니 다. eval 함 수 는 악성 스 크 립 트 를 실행 합 니 다. JSON 해상도 기 를 사용 하면 이러한 사건 을 방지 할 수 있 습 니 다. 2. JSON 해상도 기 를 사용 합 니 다.
    2.1 JSON.parse();
    JSON parse 해상도 기 는 JSON 텍스트 만 식별 할 수 있 고 모든 스 크 립 트 를 거부 합 니 다. 로 컬 JSON 이 지원 하 는 브 라 우 저 를 제공 하 는 JSON 해상도 기 는 eval 함수 보다 훨씬 빠 릅 니 다. 미래의 ECMAScript 표준 은 로 컬 JSON 을 지원 할 것 으로 예상 합 니 다. 
     사용 형식: var myObject = JSON. parse (myJSONtext, revover); 인자: my JSONtext, 해석 할 JSON 형식 문자열 revover - function 선택 가능 한 매개 변수 입 니 다. 최종 결과 의 키 (key) 와 값 (value) 으로 호출 됩 니 다. 모든 값 은 함수 의 값 으로 대 체 됩 니 다. 일반적인 클래스 를 의사 클래스 의 인 스 턴 스 로 바 꾸 거나 날짜 문자열 을 날짜 대상 으로 바 꿀 수 있 습 니 다. my Data = JSON. parse (text, function)(key, value) {var type;if (value && typeof value === 'object') {type = value.type;if (typeof type === 'string' && typeof window[type] === 'function') {return new (window[type])(value);}}return value;});2.2 JSON.stringify(); JSON stringifier 는 JavaScript 데이터 구 조 를 JSON 텍스트 로 변환 할 수 있 습 니 다. JSON 은 순환 데이터 구 조 를 지원 하지 않 으 므 로 JSON stringifier 에 순환 구 조 를 제공 하지 않도록 조심해 야 합 니 다.
    사용 형식: 사용 형식: var myJSONtext = JSON. stringify (myObject, replace); 인자: my Object, 문자열 로 변환 할 Javascript object 대상 입 니 다. replacer, stringify 함수 가 toJSON 방법 이 있 는 대상 을 발견 하면 이 방법 을 실행 하고 생 성 된 값 을 되 돌려 줍 니 다. 이러한 대상 은 자신의 JSON 표현 을 결정 할 수 있 습 니 다. stringifier 방법 은 선택 가능 한 문자열 배열 을 가 져 갈 수 있 습 니 다. 이 문자열 들 은 JS 에 포 함 된 값 을 선택 하 는 데 사 용 됩 니 다.ON 텍스트 의 속성 입 니 다. stringifier 방법 은 대체 (replace) 함 수 를 선택 할 수 있 습 니 다. 구조 에 있 는 모든 값 의 toJSON 방법 (있 으 면) 을 가 져 옵 니 다.다음 에 실 행 됩 니 다. 모든 키 와 값 을 매개 변수 로 전달 합 니 다. 물론 대상 은 이 키 를 포함 해 야 합 니 다. 값 은 stringified 로 되 돌아 갑 니 다. 배열 이나 대체 함 수 를 제공 하지 않 으 면 통 합 된 속성 을 무시 하 는 선택 가능 한 대체 함수 가 제 공 됩 니 다. 계승 되 는 모든 속성 을 원한 다 면 간단 한 대체 함 수 를 제공 할 수 있 습 니 다. var my JSONtext = JSON. stringify(myObject, function (key, value) {return value;}); 값 은 JSON 에서 어떤 내용 도 대표 하지 않 습 니 다. 함수 와 정의 되 지 않 은 (undefined) 은 제 외 됩 니 다. 정 해 지지 않 은 수량 은 null 로 대 체 됩 니 다. 다른 값 을 대체 하기 위해 아래 와 같이 대체 (replace) 함수 function replace (key, value) {if (type: of value = = = 'number' & &! isFinite (value) 를 사용 할 수 있 습 니 다.{return String (value);} return value;} 원본 코드 를 여 는 JSON 해상도 기와 JSON stringifier 를 사용 할 수 있 습 니 다. minified 를 통 해 2.5K 보다 작 을 수 있 습 니 다.
    http://www.json.org/json2.js
    http://www.crockford.com/javascript/jsmin.html
  • 좋은 웹페이지 즐겨찾기