JSON 客户端和服务器端的格式转换_Javascript教程-查字典教程网
JSON 客户端和服务器端的格式转换
JSON 客户端和服务器端的格式转换
发布时间:2016-12-30 来源:查字典编辑
摘要:这里我们会从javascript的语法引申出json,并在此基础上引出如何在ajax应用程序上使用JSON。在javascript大家知道有...

这里我们会从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();

}

下篇介绍如何在ASP.NET的环境下使用JSON和DataTable等的转换,还有介绍使用JQuery的AJAX调用Web Services的生成JSON、相当值得期待。^_^

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类