智能提示jquery-ui 插件返回json串时使用,顺道了解了下ev
一、JSON:Javascript对象表示法(Javascript Object Notation)
JSON是存储和交换文本信息的语法。类似XML
json语法规则
json语法是Javascript对象表示语法的子集
1、数据在名称/值对中
2、数据由逗号分隔
3、花括号保存对象
4、方括号保存数组
JSON名称/值对
书写格式:名称/值对
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
"firstName":"John" 等价于 firstName="John"
对象可以包含多个名称/值对
{ "firstName":"John" , "lastName":"Doe" }等价于
firstName="John";
lastName="Doe";
JSON数组
json数组在方括号中书写:
数组可包含多个对象:
{"emplorees":[
{"firstName":"John","lastName":"Doe"},
{"firstName":"Anna","lastName":"Smith"},
{"firstName":"Peter","lastName":"Jones"}
]
}
把 json 文本转换为javascript对象
json最常见的用法之一,是从web服务器上读取JSON数据(作为文件或
者做HttpRequest),讲json数据转换为javascript对象,然后在网页
中使用该数据。
JSON实例-来自字符串的对象
创建包含JSON语法的Javascript字符串
var txt = '{ "employees" : [' +'{ "firstName":"Bill" ,
"lastName":"Gates" },' +'{ "firstName":"George" ,
"lastName":"Bush" },' +'{ "firstName":"Thomas" ,
"lastName":"Carter" } ]}';
由于JSON语法是Javascript语法的子集,Javascript函数eval()
可用于讲Json文本转换为Javascript对象;
eval()函数使用的是Javascript编译器,可解析json文本。然后生成
Javascript对象。必须把文本包围在括号中,这样才能避免语法错误
var obj=eval("("+txt+")");
二、javascript eval和JSON之间的联系
ev
ev
举例说明
- ev
al评估JavaS cript表达式
var bar = 'bar'; var foobar = eval('"foo" + bar'); alert(foobar);
- ev
al评估JavaS cript语句
var bar = 'bar'; // if variable bar equals 'bar', foobar is the result of // last executing statement: bar="foo-bar"; var foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}'); alert(foobar);// change the valuebar = 'foo'; // now our the last executed statement is: bar = "bar-foo"; // therefore the value of variable foobar has been changed // into 'bar-foo' foobar = eval('if(bar == "bar") {bar="foo-bar";} else {bar = "bar-foo";}'); alert(foobar);
JSON的格式
JSON的格式是由大括号和由冒号(:)构成的名值对所组成的。注意JSON格式与对象字面量 (object literals) 的区别:JSON的名字部分严格用引号+名字来表示。
举例说明
- 对象的字面量
var objectLiteral = { name: "Objector.L", age: "24", special: "JavaScript", sayName: function() { return this.name; } };
- JSON对象
var jsonFormat = { "summary": "Blogs", "blogrolls": [ { "title": "Explore JavaScript", "link": "http://example.com/" }, { "title": "Explore JavaScript", "link": "http://example.com/" } ] };
ev
由于Ajax的兴起,JSON这种轻量级的数据格式作为客户端与服务器之间的传输格式逐渐地流行起来,进而出现的问题是如何将服务器端构建好的JSON数据转化为可用的JavaS
var jsonObject = eval("(" + jsonFormat + ")");
为什么要加括号?
加上圆括号的目的是迫使ev
alert(eval("{}"); // return undefined alert(eval("({})");// return object[Object]
JSON格式的名字部分为什么要加引号?
因为ev
举例说明
- ev
al错误解析语义
alert(eval('{foo:"bar"}')); // return "bar", incorrect
- ev
al正确解析JSON
alert(eval('({"foo": "bar"})')); // return JSON object, correct
结论
理解ev
following this format:
eval('{' + jsonString + ')');