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; }
}
}
페이지 배경 기능:
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콘텐츠 SaaS | JSON 스키마 양식 빌더Bloomreach Content를 위한 JSON Form Builder 맞춤형 통합을 개발합니다. 최근 Bloomreach Content SaaS는 내장 앱 프레임워크를 사용하여 혁신적인 콘텐츠 유형 필드를 구축할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.