JSON: JavaScript Object Notation (javaScript 对象表示法).
JSON 是一种名称/值对的结构。
一个对象一{左括号开始,以}右括号结束。没哥名称后跟一个:冒号;'名称/值' 对之间用','逗号隔开。(最后一个键值对后不用分号)
这里的 名称 要用 "(分号) 引起来,不然可能报错。(可能哦)你可以用下面的方式去表示:
{"name":"helloyangzhi"}
当然你可以多个一起串联起来:
{"name":"helloyangzhi","email":"helloayngzhi@gmail.com","age":"21"}数组是( value)的有序集合,一个数组以 "[" 左中括号开始,"]" 右中括号结束,值之间用“ ,”逗号隔开。
当然,如果你要表示数组:
{ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } ]}
这里表示一个people变量,后面包含三条记录。
当然还可以表示多个变量:
{ "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ]}
那么在实际开发中,你可以将一个json对象赋值给一个js对象.
var json = { "name":"yangzhi", "email":"helloyangzhi@gmail.com" }
这样能够在方法中传递。
在用jquery做异步传输时,如果不不指定返回对象类型,或者以字符串的方式返回。
那么就需要将字符串转换成json对象。
如下:
var obj = eval("(" + data + ")");
这样 obj 就转换成obj对象。
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})");// return object[Object]
对于这种写法,在JS中,可以到处看到。
如: (function()) {}(); 做闭包操作时等。
当然,如果你在做异步请求是指定返回为json对象。那么就不需要用eval()方法了,可以直接使用。
如:
$.post(url,{},function(){},"json");
那么在这里就指定了返回数据类型为json对象。
注:这里需要注意使用eval() 方式,是动态的去执行字符串,那么也可能是js脚本,这样就可能存在一定的系统安全问题。
所以可以采用一些规避了eval()的第三方脚本库。
第二种解析方式就是使用Function对象来完成,它的典型应用就是在JQUERY中的AJAX方法下的success等对于返回数据data的解析
var json='{"name":"CJ","age":18}'; data =(new Function("","return "+json))();