前言:
JSON(JavaScript Object Notation)是一种数据交换的格式,也就是说JSON是一种标准的数据的格式写法,由于其轻便易读的优点,可以很方便的获取其值,特别在ajax中数据传输的交换格式JSON相对方便易读。
一. JSON的写法
按照说法有JSON字符串和JSON对象两种情况,其实就思想上来说,JSON对象其实就是以特定的写法形式来命名一个对象,而json字符串则是在字符串环境下写的以JSON的写法形式写的字符串 比如:
<!-- json对象-->
var test1 = {"a":1,"b":1};
var test2 = {a:123,"b":123};
console.log(test1);
console.log(test2);
可以看到控制台确实两种方式输出了object类型,说明在创建直接JSON对象时键值可以是字符串也可以不是,这里我认为非字符串是隐式声明变量,下面再来看看JSON字符串:
<!-- json字符串-->
var test3 = '{"a":1,"b":2}';
var erro = '{a:1,"b":2}';
console.log(test3);
<!-- json字符串转化为对象-->
var test4 = JSON.parse(test3);
console.log(test4);
<!--var result = JSON.parse(erro);-->
可以发现json字符串的格式有了特别规定,这里要求了JSON字符串 在字符串环境下的键值必须是字符串,如果不是那么在使用JSON.parse();反序列化时便会报错也因此在写JSON字符串时建议一定要将键值写完字符串格式。当然还是有其他办法使变量result接收到erro的反序列化后的对象,这便是eval():
var test5 = eval('('+erro+')');
console.log(5);
利用eval()计算字符串内的结果的方式可以转化成创建JSON对象的方式,但一般来说并不建议使用eval()的方式实现反序列化,因为eval()本身的特性,不容易调试还特别容易用错比如:
var test6 = eval(erro);
便会直接报错,所以总的来说为了规范JSON写法建议在创建JSON对象或者JSON字符串时键值用字符串格式.