关于json的json格式是什么样的问题

4171人阅读
web开发(5)
最近在写一个页面,直接显示交易中返回的&table&标签,由于交易返回的&table&标签里面的东西很杂很多,并放在json格式里面传输,在调试的时候报
Uncaught SyntaxError:UnExcepted EOF ,Uncaught SyntaxError: Unexpected token ILLEGAL 等错。
这些错误的原因如要是json的数据格式的要求,json的数据中除了字符 &,\,/ 和一些控制符(\b,\f,\n,\r,\t)需要编码外,其他 Unicode 字符可以直接输出。
在我调试的程序中,虽然看我传输的东西,没有发现这些需要另外编码的字符,但是还是一直报这些错误,老大讲应该是看不到的控制符造成的这些错误。
于是,我采用下面的这种方式,对我要传输的东西进行处理。
&&&& result = URLEncoder.encode(result,&utf-8&);
&&&&&result = result.replace(&+&, &%20&);
然后在页面显示的时候,使用 var tm = decodeURIComponent(tableHtml);
对取出的数据进行了处理。
这样就解决了在传输过程json数据格式出错的问题了。
问题解决以后,我之前的问题原因进行查找,发现是在我放进json的数据中有& \r&”,我把所有的& \r ” 替换成空格,问题也迎刃而解。json数据 中的控制符没有处理,真是害人不浅啊。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:91798次
积分:1127
积分:1127
排名:千里之外
原创:20篇
转载:16篇
评论:26条
(1)(1)(1)(2)(10)(2)(1)(2)(4)(2)(4)(6)解决json日期格式问题的3种方法
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了解决json日期格式问题的3种方法 ,需要的朋友可以参考下
开发中有时候需要从服务器端返回json格式的数据,在后台代码中如果有DateTime类型的数据使用系统自带的工具类序列化后将得到一个很长的数字表示日期数据,如下所示:
代码如下://设置服务器响应的结果为纯文本格式&&&&&&&&&&& context.Response.ContentType = "text/plain";&&&&&&&&&& //学生对象集合&&&&&&&&&&& List&Student& students = new List&Student&&&&&&&&&&&& {&&&&&&&&&&&&&&& new Student(){Name ="Tom",&&&&&&&&&&&&&&&&&&& Birthday =Convert.ToDateTime(" 12:12:12")},&&&&&&&&&&&&&&& new Student(){Name ="Rose",&&&&&&&&&&&&&&&&&&& Birthday =Convert.ToDateTime(" 11:12:12")},&&&&&&&&&&&&&&& new Student(){Name ="Mark",&&&&&&&&&&&&&&&&&&& Birthday =Convert.ToDateTime(" 10:12:12")}&&&&&&&&&&& };
&&&&&&&&&&& //javascript序列化器&&&&&&&&&&& JavaScriptSerializer jss=new JavaScriptSerializer();&&&&&&&&&& //序列化学生集合对象得到json字符&&&&&&&&&&& string studentsJson=jss.Serialize(students);&&&&&&&&&& //将字符串响应到客户端&&&&&&&&&&& context.Response.Write(studentsJson);&&&&&&&&&& context.Response.End();
运行结果是:
其中Tom所对应生日“”变成了0,这其实是1970 年 1 月 1 日至今的毫秒数;0//24/365=44.11年,44+年,按这种方法可以得出年月日时分秒和毫秒。这种格式是一种可行的表示形式但不是普通人可以看懂的友好格式,怎么让这个格式变化?
解决办法:
方法1:在服务器端将日期格式使用Select方法或LINQ表达式转换后发到客户端:
代码如下:using Susing System.Collections.Gusing System.W
using System.Web.Script.S
namespace JsonDate1{&&& using System.L
&&& /// &summary&&&& /// 学生类,测试用&&& /// &/summary&&&& public class Student&&& {&&&&&&& /// &summary&&&&&&&& /// 姓名&&&&&&& /// &/summary&&&&&&&& public String Name { }
&&&&&&& /// &summary&&&&&&&& /// 生日&&&&&&& /// &/summary&&&&&&&& public DateTime Birthday { }&&& }
&&& /// &summary&&&& /// 返回学生集合的json字符&&& /// &/summary&&&& public class GetJson : IHttpHandler&&& {&&&&&&& public void ProcessRequest(HttpContext context)&&&&&&& {&&&&&&&&&&& //设置服务器响应的结果为纯文本格式&&&&&&&&&&& context.Response.ContentType = "text/plain";&&&&&&&&&&& //学生对象集合&&&&&&&&&&& List&Student& students = new List&Student&&&&&&&&&&&& {&&&&&&&&&&&&&&& new Student(){Name ="Tom",Birthday =Convert.ToDateTime(" 12:12:12")},&&&&&&&&&&&&&&& new Student(){Name ="Rose",Birthday =Convert.ToDateTime(" 11:12:12")},&&&&&&&&&&&&&&& new Student(){Name ="Mark",Birthday =Convert.ToDateTime(" 10:12:12")}&&&&&&&&&&& };
&&&&&&&&&&& //使用Select方法重新投影对象集合将Birthday属性转换成一个新的属性&&&&&&&&&&& //注意属性变化后要重新命名,并立即执行&&&&&&&&&&& var studentSet =&&&&&&&&&&&&&&& students.Select&&&&&&&&&&&&&&& (&&&&&&&&&&&&&&& p =& new { p.Name, Birthday = p.Birthday.ToString("yyyy-mm-dd") }&&&&&&&&&&&&&&& ).ToList();
&&&&&&&&&&& //javascript序列化器&&&&&&&&&&& JavaScriptSerializer jss = new JavaScriptSerializer();&&&&&&&&&&& //序列化学生集合对象得到json字符&&&&&&&&&&& string studentsJson = jss.Serialize(studentSet);&&&&&&&&&&& //将字符串响应到客户端&&&&&&&&&&& context.Response.Write(studentsJson);&&&&&&&&&&& context.Response.End();&&&&&&& }
&&&&&&& public bool IsReusable&&&&&&& {&&&&&&&&&&& get&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&& }&&& }}
Select方法重新投影对象集合将Birthday属性转换成一个新的属性,注意属性变化后要重新命名,属性名可以相同;这里可以使用select方法也可以使用LINQ查询表达式,也可以选择别的方式达到相同的目的;这种办法可以将集合中客户端不用的属性剔除,达到简单优化性能的目的。 运行结果:
这时候的日期格式就已经变成友好格式了,不过在javascript中这只是一个字符串。
在javascript中将"Birthday":"\/Date(0)\/"中的字符串转换成javascript中的日期对象,可以将Birthday这个Key所对应的Value中的非数字字符以替换的方式删除,到到一个数字0,然后实例化一个Date对象,将0毫秒作为参数,得到一个javascript中的日期对象,代码如下:
代码如下:&!DOCTYPE html&&html xmlns="http://www.w3.org/1999/xhtml"&&head&&&& &title&json日期格式处理&/title&&&& &script src="Scripts/jquery-1.10.2.min.js" type="text/javascript"&&/script&&&& &script type="text/javascript"&&&&&&&& $(function() {&&&&&&&&&&& $.getJSON("getJson.ashx", function (students) {&&&&&&&&&&&&&&& $.each(students, function (index, obj) {&&&&&&&&&&&&&&&&&&& $("&li/&").html(obj.Name).appendTo("#ulStudents");
&&&&&&&&&&&&&&&&&&& //使用正则表达式将生日属性中的非数字(\D)删除&&&&&&&&&&&&&&&&&&& //并把得到的毫秒数转换成数字类型&&&&&&&&&&&&&&&&&&& var birthdayMilliseconds = parseInt(obj.Birthday.replace(/\D/igm, ""));&&&&&&&&&&&&&&&&&&& //实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数&&&&&&&&&&&&&&&&&&& var birthday = new Date(birthdayMilliseconds);
&&&&&&&&&&&&&&&&&&& $("&li/&").html(birthday.toLocaleString()).appendTo("#ulStudents"); ;&&&&&&&&&&&&&&& });&&&&&&&&&&& });&&&&&&& });&&& &/script&&/head&&body&&&& &h2&json日期格式处理&/h2&&&& &ul id="ulStudents"&&&& &/ul&&/body&&/html&
运行结果:
上的使用正则/\D/igm达到替换所有非数字的目的,\D表示非数字,igm是参数,分别表示忽视(ignore)大小写;多次、全局(global)替换;多行替换(multi-line);有一些时候还会出现+86的情况,只需要变换正则同样可以达到目的。另外如果项目中反复出现这种需要处理日期格式的问题,可以扩展一个javascript方法,代码如下:
代码如下:$(function () {&&&&&&&&&&& $.getJSON("getJson.ashx", function (students) {&&&&&&&&&&&&&&& $.each(students, function (index, obj) {&&&&&&&&&&&&&&&&& $("&li/&").html(obj.Name).appendTo("#ulStudents");
&&&&&&&&&&&&&&&&& //使用正则表达式将生日属性中的非数字(\D)删除&&&&&&&&&&&&&&&&&&& //并把得到的毫秒数转换成数字类型&&&&&&&&&&&&&&&&&&& var birthdayMilliseconds = parseInt(obj.Birthday.replace(/\D/igm, ""));&&&&&&&&&&&&&&&&& //实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数&&&&&&&&&&&&&&&&&&& var birthday = new Date(birthdayMilliseconds);
&&&&&&&&&&&&&&&&& $("&li/&").html(birthday.toLocaleString()).appendTo("#ulStudents");&&&&&&&&&&&&&&&&& $("&li/&").html(obj.Birthday.toDate()).appendTo("#ulStudents");&&&&&&&&&&&&&&& });&&&&&&&&&&& });&&&&&&& });
&&&&&&& //在String对象中扩展一个toDate方法,可以根据要求完善&&&&&&& String.prototype.toDate = function () {&&&&&&&&&&& var dateM&&&&&&&&&&& if (isNaN(this)) {&&&&&&&&&&&&&&& //使用正则表达式将日期属性中的非数字(\D)删除&&&&&&&&&&&&&&& dateMilliseconds =this.replace(/\D/igm, "");&&&&&&&&&&& } else {&&&&&&&&&&&&&&& dateMilliseconds=&&&&&&&&&&& }&&&&&&&&&&& //实例化一个新的日期格式,使用1970 年 1 月 1 日至今的毫秒数为参数&&&&&&&&&&& return new Date(parseInt(dateMilliseconds));&&&&&&& };
上面扩展的方法toDate不一定合理,也不够强大,可以根据需要修改。
可以选择一些第三方的json工具类,其中不乏有一些已经对日期格式问题已处理好了的,常见的json序列化与反序列化工具库有:
1.fastJSON.2.JSON_checker.3.Jayrock.4.Json.NET - LINQ to JSON.5.LitJSON.6.JSON for .NET.7.JsonFx.8.JSONSharp.9.JsonExSerializer.10.fluent-json11.Manatee Json
这里以litjson为序列化与反序列化json的工具类作示例,代码如下:
代码如下:using Susing System.Collections.Gusing System.W
using LitJ
namespace JsonDate2{&&& using System.L
&&& /// &summary&&&& /// 学生类,测试用&&& /// &/summary&&&& public class Student&&& {&&&&&&& /// &summary&&&&&&&& /// 姓名&&&&&&& /// &/summary&&&&&&&& public String Name { }
&&&&&&& /// &summary&&&&&&&& /// 生日&&&&&&& /// &/summary&&&&&&&& public DateTime Birthday { }&&& }
&&& /// &summary&&&& /// 返回学生集合的json字符&&& /// &/summary&&&& public class GetJson : IHttpHandler&&& {&&&&&&& public void ProcessRequest(HttpContext context)&&&&&&& {&&&&&&&&&&& //设置服务器响应的结果为纯文本格式&&&&&&&&&&& context.Response.ContentType = "text/plain";&&&&&&&&&&& //学生对象集合&&&&&&&&&&& List&Student& students = new List&Student&&&&&&&&&&&& {&&&&&&&&&&&&&&& new Student(){Name ="Tom",Birthday =Convert.ToDateTime(" 12:12:12")},&&&&&&&&&&&&&&& new Student(){Name ="Rose",Birthday =Convert.ToDateTime(" 11:12:12")},&&&&&&&&&&&&&&& new Student(){Name ="Mark",Birthday =Convert.ToDateTime(" 10:12:12")}&&&&&&&&&&& };
&&&&&&&&&&& //序列化学生集合对象得到json字符&&&&&&&&&&& string studentsJson = JsonMapper.ToJson(students);&&&&&&&&&&& //将字符串响应到客户端&&&&&&&&&&& context.Response.Write(studentsJson);&&&&&&&&&&& context.Response.End();&&&&&&& }
&&&&&&& public bool IsReusable&&&&&&& {&&&&&&&&&&& get&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&& }&&& }}
运行结果如下:
这时候的日期格式就基本正确了,只要在javascript中直接实例化日期就好了,
var date = new Date("01/31/:12");alert(date.toLocaleString());
客户端的代码如下:
代码如下:$(function () {&&&&&&&&&&& $.getJSON("GetJson2.ashx", function (students) {&&&&&&&&&&&&&&& $.each(students, function (index, obj) {&&&&&&&&&&&&&&&&&&& $("&li/&").html(obj.Name).appendTo("#ulStudents");
&&&&&&&&&&&&&&&&&&& var birthday = new Date(obj.Birthday);&&&&&&&&&&&&&&&&&&& $("&li/&").html(birthday.toLocaleString()).appendTo("#ulStudents");&&&&&&&&&&&&&&& });&&&&&&&&&&& });&&&&&&& });
&&&&&&& var date = new Date("01/31/:12");&&&&&&& alert(date.toLocaleString());
这里讲到了三种解决json中序列化后的日期格式问题,应该还有更好更完善的方法,欢迎您告诉我。因为有很多学生问我所以我写了这点文字,欢迎批评指正。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&*&去除bom报头&*/public&static&String&formatString(String&s)&{&&&&if&(s&!=&null)&{&&&&&&&&&&s&=&s.replaceAll("\ufeff",&"");&&&&}&&&&return&s;}不管有没有把这个方法加到解析json方法的前面去,这样可以让程序更健壮。
阅读(13697)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'转:json解析常见错误(json格式检查正常,却无法解析的解决方案)',
blogAbstract:'android解析json出错:JSONException:&Value&of&type&java.lang.String&cannot&be&converted&to&JSONObject。',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:3,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:3,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'大家好',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}解决json日期格式问题的3种方法
开发中有时候需要从服务器端返回json格式地数据,在后台代码中如果有datetime类型地数据使用系统自带地工具类序列化后将的到一个很长地数字表示日期数据,如下所示:
//设置服务器响应地结果为纯文本格式
&&&&&&&&&&& context.response.contenttype = text/
&&&&&&&&&& //学生对象集合
&&&&&&&&&&& list&student& students = new list&student&
&&&&&&&&&&& {
&&&&&&&&&&&&&&& new student(){name =tom,
&&&&&&&&&&&&&&&&&&& birthday =convert.todatetime( 12:12:12)},
&&&&&&&&&&&&&&& new student(){name =rose,
&&&&&&&&&&&&&&&&&&& birthday =convert.todatetime( 11:12:12)},
&&&&&&&&&&&&&&& new student(){name =mark,
&&&&&&&&&&&&&&&&&&& birthday =convert.todatetime( 10:12:12)}
&&&&&&&&&&& };
&&&&&&&&&&& //javascript序列化器
&&&&&&&&&&& javascriptserializer jss=new javascriptserializer();
&&&&&&&&&& //序列化学生集合对象的到json字符
&&&&&&&&&&& string studentsjson=jss.serialize(students);
&&&&&&&&&& //将字符串响应到客户端
&&&&&&&&&&& context.response.write(studentsjson);
&&&&&&&&&& context.response.end();
其中tom所对应生日&&变成了0,这其实是1970 年 1 月 1 日至今地毫秒数;0//24/365=44.11年,44+年,按这种方法可以的出年月日时分秒和毫秒.这种格式是一种可行地表示形式但不是普通人可以看懂地友好格式,怎么让这个格式变化?
解决办法:
方法1:在服务器端将日期格式使用select方法或linq表达式转换后发到客户端:
using system.collections.
using system.
using system.web.script.
namespace jsondate1
&&& using system.
&&& /// &summary&
&&& /// 学生类,测试用
&&& /// &/summary&
&&& public class student
&&&&&&& /// &summary&
&&&&&&& /// 姓名
&&&&&&& /// &/summary&
&&&&&&& public string name { }
&&&&&&& /// &summary&
&&&&&&& /// 生日
&&&&&&& /// &/summary&
&&&&&&& public datetime birthday { }
&&& /// &summary&
&&& /// 返回学生集合地json字符
&&& /// &/summary&
&&& public class getjson : ihttphandler
&&&&&&& public void processrequest(httpcontext context)
&&&&&&&&&&& //设置服务器响应地结果为纯文本格式
&&&&&&&&&&& context.response.contenttype = text/
&&&&&&&&&&& //学生对象集合
&&&&&&&&&&& list&student& students = new list&student&
&&&&&&&&&&& {
&&&&&&&&&&&&&&& new student(){name =tom,birthday =convert.todatetime( 12:12:12)},
&&&&&&&&&&&&&&& new student(){name =rose,birthday =convert.todatetime( 11:12:12)},
&&&&&&&&&&&&&&& new student(){name =mark,birthday =convert.todatetime( 10:12:12)}
&&&&&&&&&&& };
&&&&&&&&&&& //使用select方法重新投影对象集合将birthday属性转换成一个新地属性
&&&&&&&&&&& //注意属性变化后要重新命名,并立即执行
&&&&&&&&&&& var studentset =
&&&&&&&&&&&&&&& students.select
&&&&&&&&&&&&&&& (
&&&&&&&&&&&&&&& p =& new { p.name, birthday = p.birthday.tostring(yyyy-mm-dd) }
&&&&&&&&&&&&&&& ).tolist();
&&&&&&&&&&& //javascript序列化器
&&&&&&&&&&& javascriptserializer jss = new javascriptserializer();
&&&&&&&&&&& //序列化学生集合对象的到json字符
&&&&&&&&&&& string studentsjson = jss.serialize(studentset);
&&&&&&&&&&& //将字符串响应到客户端
&&&&&&&&&&& context.response.write(studentsjson);
&&&&&&&&&&& context.response.end();
&&&&&&& public bool isreusable
&&&&&&&&&&& get
&&&&&&&&&&& {
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
select方法重新投影对象集合将birthday属性转换成一个新地属性,注意属性变化后要重新命名,属性名可以相同;这里可以使用select方法也可以使用linq查询表达式,也可以选择别地方式达到相同地目地;这种办法可以将集合中客户端不用地属性剔除,达到简单优化性能地目地.
这时候地日期格式就已经变成友好格式了,不过在javascript中这只是一个字符串.
在javascript中将birthday:\/date(0)\/中地字符串转换成javascript中地日期对象,可以将birthday这个key所对应地value中地非数字字符以替换地方式删除,到到一个数字0,然后实例化一个date对象,将0毫秒作为参数,的到一个javascript中地日期对象,代码如下:
&!doctype html&
&html xmlns=http://www.w3.org/1999/xhtml&
&&& &title&json日期格式处理&/title&
&&& &script src=scripts/jquery-1.10.2.min.js type=text/javascript&&/script&
&&& &script type=text/javascript&
&&&&&&& $(function() {
&&&&&&&&&&& $.getjson(getjson.ashx, function (students) {
&&&&&&&&&&&&&&& $.each(students, function (index, obj) {
&&&&&&&&&&&&&&&&&&& $(&li/&).html(obj.name).appendto(#ulstudents);
&&&&&&&&&&&&&&&&&&& //使用正则表达式将生日属性中地非数字(\d)删除
&&&&&&&&&&&&&&&&&&& //并把的到地毫秒数转换成数字类型
&&&&&&&&&&&&&&&&&&& var birthdaymilliseconds = parseint(obj.birthday.replace(/\d/igm, ));
&&&&&&&&&&&&&&&&&&& //实例化一个新地日期格式,使用1970 年 1 月 1 日至今地毫秒数为参数
&&&&&&&&&&&&&&&&&&& var birthday = new date(birthdaymilliseconds);
&&&&&&&&&&&&&&&&&&& $(&li/&).html(birthday.tolocalestring()).appendto(#ulstudents); ;
&&&&&&&&&&&&&&& });
&&&&&&&&&&& });
&&&&&&& });
&&& &/script&
&&& &h2&json日期格式处理&/h2&
&&& &ul id=ulstudents&
上地使用正则/\d/igm达到替换所有非数字地目地,\d表示非数字,igm是参数,分别表示忽视(ignore)大小写;多次、全局(global)替换;多行替换(multi-line);有一些时候还会出现+86地情况,只需要变换正则同样可以达到目地.另外如果项目中反复出现这种需要处理日期格式地问题,可以扩展一个javascript方法,代码如下:
$(function () {
&&&&&&&&&&& $.getjson(getjson.ashx, function (students) {
&&&&&&&&&&&&&&& $.each(students, function (index, obj) {
&&&&&&&&&&&&&&&&& $(&li/&).html(obj.name).appendto(#ulstudents);
&&&&&&&&&&&&&&&&& //使用正则表达式将生日属性中地非数字(\d)删除
&&&&&&&&&&&&&&&&&&& //并把的到地毫秒数转换成数字类型
&&&&&&&&&&&&&&&&&&& var birthdaymilliseconds = parseint(obj.birthday.replace(/\d/igm, ));
&&&&&&&&&&&&&&&&& //实例化一个新地日期格式,使用1970 年 1 月 1 日至今地毫秒数为参数
&&&&&&&&&&&&&&&&&&& var birthday = new date(birthdaymilliseconds);
&&&&&&&&&&&&&&&&& $(&li/&).html(birthday.tolocalestring()).appendto(#ulstudents);
&&&&&&&&&&&&&&&&& $(&li/&).html(obj.birthday.todate()).appendto(#ulstudents);
&&&&&&&&&&&&&&& });
&&&&&&&&&&& });
&&&&&&& });
&&&&&&& //在string对象中扩展一个todate方法,可以根据要求完善
&&&&&&& string.prototype.todate = function () {
&&&&&&&&&&&
&&&&&&&&&&& if (isnan(this)) {
&&&&&&&&&&&&&&& //使用正则表达式将日期属性中地非数字(\d)删除
&&&&&&&&&&&&&&& datemilliseconds =this.replace(/\d/igm, );
&&&&&&&&&&& } else {
&&&&&&&&&&&&&&& datemilliseconds=
&&&&&&&&&&& }
&&&&&&&&&&& //实例化一个新地日期格式,使用1970 年 1 月 1 日至今地毫秒数为参数
&&&&&&&&&&& return new date(parseint(datemilliseconds));
&&&&&&& };
上面扩展地方法todate不一定合理,也不够强大,可以根据需要修改.
可以选择一些第三方地json工具类,其中不乏有一些已经对日期格式问题已处理好了地,常见地json序列化与反序列化工具库有:
1.fastjson.
2.json_checker.
3.jayrock.
4.json.net - linq to json.
5.litjson.
6.json for .net.
8.jsonsharp.
9.jsonexserializer.
10.fluent-json
11.manatee json
这里以litjson为序列化与反序列化json地工具类作示例,代码如下:
复制代码 代码如下:
using system.collections.
using system.
namespace jsondate2
&&& using system.
&&& /// &summary&
&&& /// 学生类,测试用
&&& /// &/summary&
&&& public class student
&&&&&&& /// &summary&
&&&&&&& /// 姓名
&&&&&&& /// &/summary&
&&&&&&& public string name { }
&&&&&&& /// &summary&
&&&&&&& /// 生日
&&&&&&& /// &/summary&
&&&&&&& public datetime birthday { }
&&& /// &summary&
&&& /// 返回学生集合地json字符
&&& /// &/summary&
&&& public class getjson : ihttphandler
&&&&&&& public void processrequest(httpcontext context)
&&&&&&&&&&& //设置服务器响应地结果为纯文本格式
&&&&&&&&&&& context.response.contenttype = text/
&&&&&&&&&&& //学生对象集合
&&&&&&&&&&& list&student& students = new list&student&
&&&&&&&&&&& {
&&&&&&&&&&&&&&& new student(){name =tom,birthday =convert.todatetime( 12:12:12)},
&&&&&&&&&&&&&&& new student(){name =rose,birthday =convert.todatetime( 11:12:12)},
&&&&&&&&&&&&&&& new student(){name =mark,birthday =convert.todatetime( 10:12:12)}
&&&&&&&&&&& };
&&&&&&&&&&& //序列化学生集合对象的到json字符
&&&&&&&&&&& string studentsjson = jsonmapper.tojson(students);
&&&&&&&&&&& //将字符串响应到客户端
&&&&&&&&&&& context.response.write(studentsjson);
&&&&&&&&&&& context.response.end();
&&&&&&& public bool isreusable
&&&&&&&&&&& get
&&&&&&&&&&& {
&&&&&&&&&&&&&&&
&&&&&&&&&&& }
这时候地日期格式就基本正确了,只要在javascript中直接实例化日期就好了,
var date = new date(01/31/:12);
alert(date.tolocalestring());
客户端地代码如下:
$(function () {
&&&&&&&&&&& $.getjson(getjson2.ashx, function (students) {
&&&&&&&&&&&&&&& $.each(students, function (index, obj) {
&&&&&&&&&&&&&&&&&&& $(&li/&).html(obj.name).appendto(#ulstudents);
&&&&&&&&&&&&&&&&&&& var birthday = new date(obj.birthday);
&&&&&&&&&&&&&&&&&&& $(&li/&).html(birthday.tolocalestring()).appendto(#ulstudents);
&&&&&&&&&&&&&&& });
&&&&&&&&&&& });
&&&&&&& });
&&&&&&& var date = new date(01/31/:12);
&&&&&&& alert(date.tolocalestring());
这里讲到了三种解决json中序列化后地日期格式问题,应该还有更好更完善地方法,欢迎您告诉我.因为有很多学生问我所以我写了这点文字,欢迎批评指正.
: 更多网络编程信息请查看:}

我要回帖

更多关于 json格式的数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信