json教学,json使用方法
JSON:JavaScript对象表示法(JavaScript对象符号).
数据是存储和交换文本信息的语法。类似XML。
数据比可扩展置标语言更小、更快,更易解析。
实例:
% @ Page Language= c# AutoEventWireup= true code behind= JSON _ test。aspx。cs Inherits= Web _ softace测试。JSON。JSON _ test %
!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0
过渡//EN
http://www。w3。org/TR/XHTML 1/DTD/XHTML 1-过渡。 DTD
超文本标记语言
xmlns= http://www。w3。 org/1999/XHTML
head runat=server
标题无标题页面/标题
脚本类型=文本/javascript
var text= { employees:[ { last name : Getes , FirstName:Bill}, {LastName:Yue , FirstName:Ace}, {LastName:Bush , first name : George }]} ;
var obj=eval(( text ));
/脚本
/头
身体
表单id=form1
runat=server
部门名称:span
id=sp_name /span br
/年龄:span
id=sp_age /span br
/地址:span
id=sp_address /span br
/电话:span
id=sp_phone /span /p
% -脚本
type= text/JavaScript var JSON对象
={员工:[ {
姓名: 年月,年龄: 22 ,地址:广东
沈正,电话: 1234567 },{
姓名: Getes ,年龄: 52 ,地址:美国的,电话: 555-1234567 }]};
文档。getelementbyid( sp _ name ).innerHTML
JsonObject.employees[1].姓名;
文档。getelementbyid( sp _ age ).innerHTML
JsonObject.employees[1].年龄;
文档。getelementbyid( sp _ address ).innerHTML
JsonObject.employees[1].地址;
文档。getelementbyid( sp _ phone ).innerHTML
JsonObject.employees[1].电话;
/script - %
p名字:span
id=sp_firstname /span br
/姓氏:span
id=sp_lastname /span /p
脚本类型=文本/javascript
文档。getelementbyid( sp _ first name ).innerHTML
员工[0]。名字;
文档。getelementbyid( sp _ last name ).innerHTML
员工[0]。姓氏;
/脚本
/div
形式
身体
超文本标记语言
类似可扩展置标语言
数据是纯文本
数据具有"自我描述性"(人类可读)
数据具有层级结构(值中存在值)
数据可通过Java脚本语言进行解析
数据数据可使用创建交互式、快速动态网页应用的网页开发技术进行传输
数据序列化与反序列化
数据的序列化需要用到DataContractJsonSerializer类,在命名空间系统运行时。序列化。数据下。网
框架3.5需要添加系统。服务模型。网引用;网框架
四在系统。运行时。序列化中。
jsonhelper类:
公共类JsonHelper {
///摘要///
数据序列号////摘要
///typeparam
name=T /typeparam
///param name=t /param
///返回/返回
公共静态字符串JsonSerializa T (T t)
{
DataContractJsonSerializer zer=new DataContractJsonSerializer(类型为(T));
MemoryStream ms=new
内存流();
零WriteObject(ms,t);
字符串jsonstring=
编码10 . UTF8。GetString(ms . to array());
ms . Close();
返回
jsonstring
}
///摘要///
数据反序列化////摘要
///typeparam
name=T /typeparam /
//param
name=strjson /param
///返回/返回
公共静态T JsonDeserializa T(字符串strjson)
{
DataContractJsonSerializer zer=new DataContractJsonSerializer(类型为(T));
MemoryStream ms=new
内存流(编码10 . UTF8。GetBytes(str JSON));
策尔ReadObject(毫秒);
返回
目标文件
}
}
人类:
公共阶层的人
{ publicstring Name { get设置;} publicint Age { get设置;}
}
简单实现:
受保护的空隙
页面加载(对象发送方,事件参数e)
{
人员p=
person();
页(第页的缩写)名称=
ace ;
页(第页的缩写)年龄=
22;
字符串json=
JsonHelper .JsonSerializa人
回应。写(JSON);
}
数据序列化处理日期类型的处理
数据格式不直接支持日期和时间日期时间值值显示为"/日期(700000
0500)/"形式的数据字符串,其中第一个数字(在提供的示例中为700000)是绿色时光格林尼治标准时间时区中自1970 年一月一
日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括"
0500"的部分可选,它指示该时间属于当地的类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为世界协调时。
修改jsonhelper类需用到的名称空间:
使用系统运行时。序列化。数据
使用系统。木卫一;使用系统。文本;使用系统正文。正则表达式;使用系统。集合。泛型;//列表名称空间
jsonhelper类的修改:
公共类JsonHelper {
///
summary ///json序列化///
/摘要
///typeparam
name=T /typeparam
///param
name=t /param
///返回/返回
公共静态字符串JsonSerializer T (T
t)
{
DataContractJsonSerializer zer=new
DataContractJsonSerializer(类型为(T));
MemoryStream ms=new
内存流();
零WriteObject(毫秒
t);
字符串jsonstring=
编码10 . UTF8。GetString(ms . to array());
ms . Close();
字符串p=
@ /Date (( d) d ) /;
MatchEvaluator me=new
匹配评估器(ConvertJsonDateToDateString)
;Regex rg=new
正则表达式(p);
jsonstring=rg .Replace(jsonstring,
我);
返回
jsonstring
}
///summary ///json反序列化///
/摘要
///typeparam
name=T /typeparam
///param
name=jsonstring /param
///
退货/退货
公共静态测试
JsonDeserializer T(字符串
jsonstring)
{
字符串p=
@ d { 4 }- d { 2 }- d { 2 } s d { 2 }: d { 2 }: d { 2 } ;
MatchEvaluator me=new
匹配评估器(ConvertDateTimeToJsonDate);
Regex rg=new
正则表达式(p);
jsonstring=rg .Replace(jsonstring,
我);
DataContractJsonSerializer zer=new
DataContractJsonSerializer(类型为(T));
MemoryStream ms=new
内存流(编码10 . UTF8。GetBytes(JSON字符串));
对象=
泽ReadObject(毫秒);
返回
目标文件
}
///摘要///
将数据序列化的时间由/日期(1294499956278 0800)转为字符串///
/摘要/
//param
name=m /param
///
退货/退货
私有静态字符串
ConvertJsonDateToDateString(匹配m)
{
字符串结果=
字符串。空的;
DateTime dt=new
DateTime(1970,1,1);
dt=
dt .add millisecond(long .Parse(m.Groups[1].值));
dt=
dt .ToLocalTime();
结果=dt .ToString(yyyy-MM-dd
HH:mm:ss’);
返回
结果;
}
///摘要///
将时间字符串转化成数据时间///
/摘要
///param
name=m /param
///
退货/退货
私有静态字符串
ConvertDateTimeToJsonDate(匹配m)
{
字符串结果=
字符串。空的;
日期时间dt=
日期时间Parse(m.Groups[0]).值);
dt=
dt .touuniversaltime();
时间跨度ts=dt -
日期时间parse( 1970-01-01 );
结果=字符串。格式( /Date({ 0 } 0800) /),ts .总数毫秒);
返回
结果;
}
}
人类的修改:
public class Person { public string Name { get;设置;} public int Age { get设置;}公共日期时间LastLoginTime { get设置;}
}
实例调用及对集合、字典、数组的处理:
保护
void Page_Load(对象发送方,EventArgs
e)
{
人物ps=新
person();
ps .年龄=22;
ps .名字=Ace
ps .LastLoginTime=
日期时间。现在;
线
json=
JsonHelper .JsonSerializer人员(ps)
;回应。写(JSON);
列出人员lt=新
列出人员()
{
新人(){Name=Ace ,年龄=22,LastLoginTime=DateTime .现在},
新人(){Name=Getes ,年龄=55,LastLoginTime=DateTime .现在}
};
字符串jsonstring=
JsonHelper .JsonSerializer列表人员(lt);
回应. write(JSON字符串);
字典字符串,字符串dy=新字典字符串,字符串
dy .Add(Name , Ace );
dy .添加(年龄, 22 );
字符串json1=
JsonHelper .JsonSerializer字典字符串,字符串(dy);
回应. write(JSON 1);
}
用爪哇岛描述语言处理
函数更改日期格式(jsondate)
{
JSON日期=JSON日期。替换(/Date(, ).替换()/,
);
if (jsondate.indexOf() 0)
{
jsondate=jsondate.substring(0,jsondate。())的索引;
}
else if (jsondate.indexOf(-)
{
jsondate=jsondate.substring(0,jsondate。(-)的索引;
}
var日期=新日期(parseInt(jsondate,10));
var month=date.getMonth() 1 10?0
(日期。getmonth()1):日期。getmonth()
1;
var当前日期=日期。getdate()10?0
约会。getdate():日期。getdate();
return date.getFullYear() -
月份-
当前日期;
}