在构造JSON串时需要注意的一点
随着web技术的发展,现在Ajax已经不再是新生事物了,基本上已经成为了我们开发的标准。而JSON凭借着自身的优势基本上成为我们在使用异步请求时首选的数据传输格式,尤其是使用它在传输数据的时候可以大大减小数据量,从而提高网络通讯的效率,但是在使用JSON的时候有一个地方需要我们注意一下,那就是JSON中的一些关键字。看看下面的代码
1 public class json : IHttpHandler
2 {
3
4 public void ProcessRequest(HttpContext context)
5 {
6 context.Response.Write("{\"title\":\"hello\nworld\"}");
7 }
8
9 public bool IsReusable
10 {
11 get
12 {
13 return false;
14 }
15 }
16 }
2 {
3
4 public void ProcessRequest(HttpContext context)
5 {
6 context.Response.Write("{\"title\":\"hello\nworld\"}");
7 }
8
9 public bool IsReusable
10 {
11 get
12 {
13 return false;
14 }
15 }
16 }
1 $(document).ready(function() {
2
3 $.ajax({
4
5 url: "json.ashx?stamp=" + new Date().getMilliseconds(),
6 dataType: "json",
7 success: function(json) {
8 alert(json.title);
9 },
10 error: function(e,r) {
11 alert(r);
12 }
13 });
14 });
2
3 $.ajax({
4
5 url: "json.ashx?stamp=" + new Date().getMilliseconds(),
6 dataType: "json",
7 success: function(json) {
8 alert(json.title);
9 },
10 error: function(e,r) {
11 alert(r);
12 }
13 });
14 });
如果我们只是简单的看代码,可能会认为这里会弹出hello world这个字符串,可是当我们实际运行这个程序的时候,会意外的出现解析错误,这个理解起来可能不是很直观。我们注意到hello world中间的那\n,正是这个东西导致的解析错误,原因是为什么呢?
其实也不是很深奥,JSON串虽然称作串,但它的全程叫做JavaScript Object Notation—JavaScript对象表示法,这个字符串是作为js中的对象来解析的,更直白点说它是语法级别的,它们是被当作JS代码的,是要给JS解释器来看的,正如刚才那个JSON串,他的正确表示方法应该是这样
{"title":"hello world"}
而在我们的程序中实际输出的却是这种情况:
{"title":"hello
world"}
world"}
上面这种表示法,在JS解释器中会被认为是语法错误,因为字符串没有在行内闭合,因为我们多输出了一个\n,所以产生了语法错误,所以我们平时在写JS的时候一定要注意这种情况,类似的字符还有 " ' [ ] {} 等,这些也都有可能引起JSON串的语法错误。