JSon和object literal 区别
2012-09-16 21:56 youxin 阅读(1063) 评论(0) 编辑 收藏 举报JSON格式及其简单,它只是数组和对象直接量的混合写法,看一个JSON字符串的例子:
{"name": "value", "some": [1, 2, 3]}
JSON和对象直接量在语法上的唯一区别是,合法的JSON属性名均用引号包含。而在对象直接量中,只有属性名是非法的标识符时采用引号包含,比如,属性名中包含空格{"first name": "Dave"}
。
在JSON字符串中,不能使用函数和正则表达式直接量。
是不是JSON:
{“name”: ”tonny”}
上面的表示是JSON么,它可以是对象常量(Object Literal)也可以是JSON字符串,关键是看他在上下文中是怎么运用的。例如:
var person='{ "name" : "tonny"}';
//this is a json string
var person={ "name" :"tonny" };
//this is an object literal
区别:
JSON中:
Key值必须用双引号表示,单引号都不行。所有的字符串都必须加上双引号
Values可以是String、Number、Object、Array、true、false、null. No Function
从以上啰嗦的一段可以看到,我一直在强调字符串。所以JSON只是一种表示成字符串的数据交换格式。有种说法将对象字面量(JavaScript Object Literals)叫做“JSON Objects”,他们仅仅是看上去相似而已,然而这样的叫法是错误的。
然而,虽然对象字面量(JavaScript Object Literals)不可以叫做“JSON Objects“,单事实上存在JSON object,当然这和object literal完全是两码事了。
javascript单引号 双引号没啥区别。
var json1 = eval('(' + jsonStr + ')');
var result;
var i;
for(i in json1)
{
result+=i+":"+json1[i]+"<br/>";
}
document.write('<br/>'+result);
输出undefinedmykey:my value
为什么前面有undefined,因为定义时没有赋值,初值就是undefined。
改为 var result='';
这种解析 JSON 格式字符串的简单实现存在安全问题,被插入的恶意 JSON 字符串(比如获取用户的 cookie 信息)可能被解析并执行。 可以使用一些经过验证的安全成熟的的解决方案
这种解析 JSON 格式字符串的简单实现存在安全问题,被插入的恶意 JSON 字符串(比如获取用户的 cookie 信息)可能被解析并执行。 可以使用一些经过验证的安全成熟的的解决方案,例如 json2.js 中的 JSON.parse() 或jQuery.parseJSON()。
源自:http://www.cnblogs.com/TonnyGu/archive/2011/09/21/2184407.html
更好的解析json的方式:引入json.js文件:
var json2=JSON.parse(jsonStr);
和JSON.parse()方法相对应的是JSON.stringify()。它将对象或数组(或任何原始值)转换为JSON字符串。
var dog = { name: "Fido", dob:new Date(), legs:[1,2,3,4] }; var jsonstr = JSON.stringify(dog); // jsonstr is now: // {"name":"Fido","dob":"2010-04-11T22:36:22.436Z","legs":[1,2,3,4]}
参考:https://github.com/jayli/javascript.patterns/blob/master/chapter3.markdown