[转载]在构造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串的语法错误。