JSON 客户端和服务器端的格式转换

 更新时间:2009年08月27日 00:28:29   作者:  
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();
}

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

相关文章

  • 深入分析JSON编码格式提交表单数据

    深入分析JSON编码格式提交表单数据

    这篇文章主要介绍了深入分析JSON编码格式提交表单数据的相关资料,需要的朋友可以参考下
    2015-06-06
  • JSON.parse 数据不完整的解决方法

    JSON.parse 数据不完整的解决方法

    本文主要介绍了JSON.parse 数据不完整的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • JSON.stringify 语法实例讲解

    JSON.stringify 语法实例讲解

    可能有些人对系列化这个词过敏,我的理解很简单。就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的)。就这么简单。打个比方说,你有一个类,那么你可以通过这个方法转换成相应的json类型的
    2012-03-03
  • JSON相关知识汇总

    JSON相关知识汇总

    本文给大家汇总了一下关于json的相关的知识点,从基础到示例,非常全面,有需要的小伙伴可以参考下。
    2015-07-07
  • js+json用表格实现简单网站左侧导航

    js+json用表格实现简单网站左侧导航

    闲暇之余,制作一用表格实现的简单的网站导航条,分享给大家。这里的数据基于json格式,学习json的朋友可以参考下。
    2010-04-04
  • 解读JSON的三种格式

    解读JSON的三种格式

    这篇文章主要介绍了解读JSON的三种格式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • JS解析后台返回的JSON格式数据实例

    JS解析后台返回的JSON格式数据实例

    今天小编就为大家分享一篇JS解析后台返回的JSON格式数据实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 实现单层json按照key字母顺序排序的示例

    实现单层json按照key字母顺序排序的示例

    下面小编就为大家分享一篇实现单层json按照key字母顺序排序的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • 使用JSON作为函数的参数的优缺点

    使用JSON作为函数的参数的优缺点

    这篇文章主要介绍了使用JSON作为函数的参数的优缺点,需要的朋友可以参考下
    2016-10-10
  • JSON 入门教程基础篇 json入门学习笔记

    JSON 入门教程基础篇 json入门学习笔记

    刚开始接触json的时候感觉有点奇怪的命名,后来使用才发现这么简单而且用好用,扩展性很强,这里就为大家整理一下
    2020-09-09

最新评论