JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。
JSON建构于两种结构:
1、“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表 (hash table),有键列表(keyed list),或者关联数组 (associative array)。
示例:{"UserID":11, "Name":"Froog"};
2、值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
如:
示例:var Users=[{"userID":"1","Name":"Froog","friends":["Jack","Zack","Justin"]},
{"userID":"2","Name":"Zack","friends":["Jack","Zack","Justin"]},
{"userID":"3","Name":"Justin","friends":["Jack","Zack","Justin"]}
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交号)分隔。
JSON具有以下这些形式:
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
数组是 值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔值(value)可以是双引号括 起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。
NET中通过JavaScriptSerializer类操作JSON对象
示例代码:
- 1.JavaScriptSerializer json = new JavaScriptSerializer();
- 2.// 反序列化JSON字符串到对象
- 3.User user = json.Deserialize<User>(jsonString);
- 4.// 序列化对象为JSON字符串
- 5.string jsonString = json.Serialize(user);
- JavaScriptSerializer 成员信息:http://msdn.microsoft.com/zh-cn/library /system.web.script.serialization.javascriptserializer_members.aspx
AJAX 中使用JSON
示例代码:
- function getResult()
- {
- $.ajax({
- type: "POST",
- url: "?Json=true",
- data:"UserInfo="+obj.toJSONString(),
- success: function(msg){
- . var obj = msg.parseJSON();
- alert( "Name: " + obj.Name +",User:"+obj.User );
- }
- });
完整示例代码
Default.aspx
- 1.<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="JsonWeb._Default" %>
- 2.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- 3.<html xmlns="http://www.w3.org/1999/xhtml" >
- 4.<head runat="server">
- 5. <title>Untitled Page</title>
- 6. <script src="http://www.json.org/json.js" type="text/javascript"></script>
- 7. <script src="http://code.jquery.com/jquery.js" type="text/javascript"></script>
- 8.<script type="text/javascript">
- 9. // "名称/值"对的集合
- 10. var User={"userID":"1","Name":"Froog","friends":["Jack","Zack","Justin"]}
- 11. alert(User.Name);alert(User.friends[0]);
- 12.
- 13. // 值的有序列表
- 14. var Users=[{"userID":"1","Name":"Froog","friends":["Jack","Zack","Justin"]},
- 15. {"userID":"2","Name":"Zack","friends":["Jack","Zack","Justin"]},
- 16. {"userID":"3","Name":"Justin","friends":["Jack","Zack","Justin"]}
- 17. ]
- 18. alert(Users[2].Name);alert(Users[2].friends.length);
- 19. alert(escape());
- 20.
- 21. // 转换JSON字符到Object
- 22. var JsonString = '{"userID":"2","Name":"Froog","friends":["Jack","Zack","Justin"]}';
- 23. var User2 = eval('(' + JsonString + ')');
- 24. alert(User2.Name);alert(User2.friends[0]);
- 25.
- 26. //引用 json.js 实现JSON字符与Object相互转换。
- 27. var obj = JsonString.parseJSON();
- 28. alert(obj.toJSONString());
- 29.
- 30. //AJAX 中使用JSON
- 31. function getResult()
- 32. {
- 33. $.ajax({
- 34. type: "POST",
- 35. url: "?Json=true",
- 36. data:"UserInfo="+obj.toJSONString(),
- 37. success: function(msg){
- 38. var obj = msg.parseJSON();
- 39. alert( "Name: " + obj.Name +",User:"+obj.User );
- 40. }
- 41. });
- 42. // requestHeaders: {Accept: 'application/json'} /**/,
- 43. }
- 44.</script>
- 45.</head>
- 46.<body>
- 47. <form id="form1" runat="server">
- 48. <div>
- 49. <input type="button" value="AJAX" />
- 50. </div>
- 51. </form>
- 52.</body>
- 53.</html>
Default.aspx.cs
- 1.using System;
- 2.using System.Collections;
- 3.using System.Configuration;
- 4.using System.Data;
- 5.using System.Linq;
- 6.using System.Web;
- 7.using System.Web.Security;
- 8.using System.Web.UI;
- 9.using System.Web.UI.HtmlControls;
- 10.using System.Web.UI.WebControls;
- 11.using System.Web.UI.WebControls.WebParts;
- 12.using System.Xml.Linq;
- 13.using System.Web.Script.Serialization;
- 14.namespace JsonWeb
- 15.{
- 16. public partial class _Default : System.Web.UI.Page
- 17. {
- 18. protected void Page_Load(object sender, EventArgs e)
- 19. {
- 20. if (Request.QueryString["Json"] != null)
- 21. {
- 22. // AJAX 异步调用处理程序
- 23. string UserInfo = Request.Form["UserInfo"] ?? string.Empty;
- 24. JavaScriptSerializer json = new JavaScriptSerializer();
- 25. Product product = new Product() { Name = "Computer " };
- 26. if (!string.IsNullOrEmpty(UserInfo))
- 27. {
- 28. // 反序列化
- 29. User user = json.Deserialize<User>(UserInfo);
- 30. product.User = user.Name;
- 31. }
- 32. else
- 33. {
- 34. product.User = "Unknow";
- 35. }
- 36. // 序列化
- 37. string jsonString = json.Serialize(product);
- 38. // 输出异步处理结果
- 39. Response.ContentType = "application/json";
- 40. Response.Write(jsonString);
- 41. Response.End();
- 42. }
- 43. }
- 44. }
- 45. [Serializable]
- 46. public class Product
- 47. {
- 48. public string Name;
- 49. public string User;
- 50. }
- 51. public class User
- 52. {
- 53. public string Name { get; set; }
- 54. }
- 55.}