여기서는 javascript의 구문에서 json을 파생시키고, 이를 기반으로 ajax 애플리케이션에서 JSON을 사용하는 방법을 살펴보겠습니다.
자바스크립트에 배열이 있다는 것은 누구나 알고 있습니다. 형식은 다음과 같습니다.
var Beatles = ["Paul" ,"John","George","Ringo"];
위의 예는 배열 형식이며 다음과 동일합니다.
var Beatles =new Array ["Paul","John"," George","Ringo"];
다른 하나는 Objects입니다. 객체를 생성하는 방법은 다음과 같습니다.
var Beatles = {"Country":"England","YearFormed":1959,"Style":"Rock'n' Roll"}
위 생성 방법은 동일합니다. 다음과 같이 생성합니다.
var Beatles = new Object( );
Beatles.Country = "England";
Beatles.YearFormad =
Beatles.Style = " Rock'n'Roll";
다른 자바스크립트 객체와 동일 마찬가지로 속성은 '.' 또는 '[ ]'로 나타낼 수 있습니다.
객체는 다음과 같이 배열을 포함할 수 있습니다.
var Beatles = {
"국가":"잉글랜드",
"YeatFormed": 1959,
"Style" : "Rock'n'Roll",
"멤버":[ " Paul"," John","George","Ringo"]
}
배열에 객체를 포함할 수도 있습니다:
var Rockbands =[
{
"Name":"BeatLes",
" County": "England" ,
"YearFormed" : 1959,
"Style" : "Rock'n'Roll" ,
"Members" : ["Paul","John","George" ,"Ringo"]
},
{
"이름" ""Rolling Stones",
"국가":"England",
"연도":1962,
" 스타일": "Rock' n'Roll",
"멤버":["Mick"],"Keith","Charlie","Bill"]
}
]
JSON 공식 웹사이트에서는 다음과 같이 JSON을 설명합니다.
1. 가벼운 데이터 변환 형식
2. 사람이 읽고 쓰기 쉽습니다.
3. 🎜>JSON 구문 :
JSON은 일부 주니어 프로그래머에게는 읽고 쓰기가 어려울 수 있지만, 경험이 많은 사람들에게는 여전히 꽤 좋습니다(개인 의견)
JSON과 javascript의 구문은 비슷하지만 각각 그 중 객체는 변수에 할당될 수 없습니다. 즉, 객체가 아니라 문자열입니다. 변환은 eval()을 사용하여 수행할 수 있습니다. JavaScript의 기능은 안전상의 이유로 변환을 위해 json.js를 사용하는 것이 좋습니다. 가장 기본적인 두 가지 방법은 다음과 같습니다.
JSON.parse(strJSON) - JSON 문자열을 JavaScript 개체로 변환합니다.
JSON.stringify(objJSON) – JavaScript 개체를 JSON 개체로 변환하는 데 사용됩니다.
클라이언트 측에서의 데이터 변환인데, 서버 측에서는 어떻게 진행되나요? 이미 다양한 언어에 대한 아주 좋은 변환 라이브러리가 있습니다. 저는 .net에 가깝기 때문에 C#을 사용하여 JSON의 서버 측 변환을 수행하는 방법은 다음과 같습니다.
외국 형제가 .net에서 JSON을 변환하는 방법에 대해 꽤 좋은 글을 쓴 것을 봤습니다. JSON.NET과 Microsoft의 JavaScriptSerializer를 통합하므로 어떤 JSON 형식을 사용하더라도 기본적으로 처리할 수 있습니다.
이제 JSON 변환, JSON 생성 및 구문 분석을 위한 간단한 코드를 제공합니다.
코드 복사 코드는 다음과 같습니다.
공개 문자열 Serialize(객체 값)
{
Type type = value.GetType();
Newtonsoft.Json.JsonSerializer json = new Newtonsoft.Json.JsonSerializer();
json.NullValueHandling = NullValueHandling.Ignore;
json.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace;
json.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore;
json.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
if (type == typeof(DataRow))
json.Converters.Add(new DataRowConverter());
else if(type == typeof(DataTable))
json.Converters.Add(new DataTableConverter());
else if (type == typeof(DataSet))
json.Converters.Add(new DataSetConverter());
StringWriter sw = new StringWriter();
Newtonsoft.Json.JsonTextWriter 작가 = new JsonTextWriter(sw);
if (this.FormatJsonOutput)
writer.Formatting = Formatting.Indented;
else
writer.Formatting = Formatting.None;
writer.QuoteChar = '"';
json.Serialize(writer, value);
string 출력 = sw.ToString();
writer.Close();
sw.Close();
출력 반환;
}
공용 객체 Deserialize(string jsonText, Type valueType)
{
Newtonsoft.Json.JsonSerializer json = new Newtonsoft.Json.JsonSerializer();
json.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
json.ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace; = Newtonsoft.Json.MissingMemberHandling.Ignore;
json.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
StringReader sr = new StringReader(jsonText)
Newtonsoft.Json.JsonTextReader; JsonTextReader(sr);
객체 결과 = json.Deserialize(reader, valueType);
reader.Close();
결과 반환; >재NET.JSON의 基础上使사용JavascriptSeriazible来转换:
复代码
{}
public string Serialize(객체 값)
{
JavaScriptSerializer ser = 새로운 JavaScriptSerializer();
목록 변환기 = 새로운 List();
if (값 != null)
{
유형 유형 = value.GetType();
if (type == typeof(DataTable) || type == typeof(DataRow) || type == typeof(DataSet))
{
converters.Add(new WebExtensionsDataRowConverter());
converters.Add(new WebExtensionsDataTableConverter());
converters.Add(new WebExtensionsDataSetConverter());
}
if (converters.Count > 0)
ser.RegisterConverters(converters);
}
return = ser.Serialize(value);
}
공용 객체 Deserialize(string jsonText, Type valueType)
{
// *** '동적' 비상수 유형 인스턴스와 함께 Reflection을 사용해야 함
JavaScriptSerializer ser = new JavaScriptSerializer ();
객체 결과 = ser.GetType()
.GetMethod("Deserialize")
.MakeGenericMethod(valueType)
.Invoke(ser, new object[1] { jsonText });
반환 결과;
}
}
내부 클래스 WebExtensionsDataTableConverter : JavaScriptConverter
{
공개 재정의 IEnumerable SupportedTypes
{
get { return new Type[] {typeof(DataTable)}; }
}
공용 재정의 객체 Deserialize(IDictionary Dictionary, Type type,
JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
下篇介绍如何在 asp.net 的环境下使用 json 和 dataTable 等的转换, 还有介绍使用 jQuery 的 ajax 调用 웹 서비스 的生成 json 、相当值得期待。 ^_^