JSON是JavaScript Object Notation的缩写。JSON是个轻量级的用于服务器端和客户端交换数据的数据格式。它经常会用在ajax应用上,是因为它是基于ajax对象的格式定义出来的。

 

这里我们会从javascript的语法引申出json,并在此基础上引出如何在ajax应用程序上使用JSON。
在javascript大家知道有个Arrays:数组。它的格式如下:
复制代码 代码如下:

var Beatles = [“Paul”,”John”,”George”,”Ringo”];

上面的实例一个Array的形式和下面的等价:
复制代码 代码如下:

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 = 1959; 
Beatles.Style = “Rock'n'Roll”;

同其它javascript对象一样,属性能够通过'.'或'[ ]'来表示出来。
Object可以包含Array, 如下:
复制代码 代码如下:

var Beatles = { 
“Country” :”England”, 
“YeatFormed”: 1959, 
“Style” : “Rock'n'Roll”, 
“Members”:[ “Paul”,”John”,”George”,”Ringo”] 
}

同样也可以在Array中包含Objects:
复制代码 代码如下:

var Rockbands =[ 
{ 
“Name”:”BeatLes”, 
“County” : “England”, 
“YearFormed” : 1959, 
“Style” : “Rock'n'Roll”, 
“Members” : [“Paul”,”John”,”George”,”Ringo”] 
}, 
{ 
“Name” “ “Rolling Stones”, 
“Country”:”England”, 
“YearFormed”:1962, 
“Style” : “Rock'n'Roll”, 
“Members” :[“Mick”],”Keith”,”Charlie”,”Bill”] 
} 
]

在JSON的官网上描述JSON如下:
1. 一个轻量级的数据转化形式。
2. 容易人们去读和写。
3. 容易机器去解析和生成。
JSON的语法:
JSON对于一些初级程序员可能觉得不好读和写,但是对于比较有经验的人来说还是相当不错的(个人观点)。
虽然JSON和javascript的语法差不多但是它的每个对象不能够赋值给一个变量。也就是它本身不是哥object而是个字符串。每次得到JSON时我们必须通过转化来使用它。虽然使用javascript的eval()功能能够实现转换,但是为了安全起见建议大家使用json.js来转换。可以到上面提供的那个地址下载。它里面最基本的两个方法:
JSON.parse(strJSON)-是用来转化JSON字符串为JavaScript对象的、
JSON.stringify(objJSON) –用来转化一个JavaScript对象为一个JSON对象的。
这个是客户端的数据转化,那么服务器端如何进行呢?针对不同的语言会有不同的已经非常好的转换库。因为本人是接近.net的所以这里介绍如何使用C#来进行JSON的服务器端转换。
我看一个外国大哥写了一篇 关于在.net下如何转化JSON的文章相当不错。他把JSON.NET和微软的JavaScriptSerializer集成到一块,这样不管你是哪种格式的JSON基本上都能搞定了、
现提供个简单的转化JSON的生成和解析JSON的代码:
复制代码 代码如下:

public string Serialize(object value) 
{ 
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 writer = new JsonTextWriter(sw); 
if (this.FormatJsonOutput) 
writer.Formatting = Formatting.Indented; 
else 
writer.Formatting = Formatting.None; 
writer.QuoteChar = '"'; 
json.Serialize(writer, value); 
string output = sw.ToString(); 
writer.Close(); 
sw.Close(); 
return output; 
} 
public object 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; 
json.MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore; 
json.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
StringReader sr = new StringReader(jsonText); 
Newtonsoft.Json.JsonTextReader reader = new JsonTextReader(sr); 
object result = json.Deserialize(reader, valueType); 
reader.Close(); 
return result; 
}

在NET.JSON的基础上使用JavascriptSeriazible来转换:
复制代码 代码如下:

internal class WebExtensionsJavaScriptSerializer : JSONSerializerBase, IJSONSerializer 
{ 
public WebExtensionsJavaScriptSerializer(JSONSerializer serializer) : base(serializer) 
{} 
public string Serialize(object value) 
{ 
JavaScriptSerializer ser = new JavaScriptSerializer(); 
List<JavaScriptConverter> converters = new List<JavaScriptConverter>(); 
if (value != null) 
{ 
Type type = 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); 
} 
public object Deserialize(string jsonText, Type valueType) 
{ 
// *** Have to use Reflection with a 'dynamic' non constant type instance 
JavaScriptSerializer ser = new JavaScriptSerializer(); object result = ser.GetType() 
.GetMethod("Deserialize") 
.MakeGenericMethod(valueType) 
.Invoke(ser, new object[1] { jsonText }); 
return result; 
} 
} internal class WebExtensionsDataTableConverter : JavaScriptConverter 
{ 
public override IEnumerable<Type> SupportedTypes 
{ 
get { return new Type[] {typeof (DataTable)}; } 
} 
public override object Deserialize(IDictionary<string, object> dictionary, Type type, 
JavaScriptSerializer serializer) 
{ 
throw new NotImplementedException(); 
}