JSon和object literal 区别

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

原文地址:https://www.cnblogs.com/youxin/p/2687924.html