JSON,英语全称为 JavaScript Object Notation,翻译成中文为 JavaScript 对象简谱。
它是 Douglas Crockford 于 2001 年发明的一种轻量级数据存储格式,在 2005 - 2006 年正式成为主流的数据格式,雅虎和谷歌就在那时开始广泛地使用该格式。之后很多社交网站(例如 Twitter,Facebook)也使用 JSON 来进行 Web 服务之间的信息共享与交换。
JSON 最大的优点是在人、机可读性方面达到了一个最佳的临界点。比起之前广泛使用的 XML 数据格式,解析一个 JSON 数据要轻松容易很多。
经常有人会把 JavaScript 对象字面量和 JSON 混淆,认为是同一个东西。但实际上它们之间还是有几个关键性的区别,如下:
属性名必须用双引号引起来
允许的值包括数字,true,false,null,数组,对象以及双引号引起来的字符串
函数是不允许的
例如:蝙蝠侠的 JSON 字符串可以表示为如下
let batman = {
"name" : "Batman",
"real name" : "Bruce Wayne",
"height" : 74,
"weight" : 210,
"hero" : true,
"villain" : false,
"allies" : ["Robin","Batgirl","Superman"]
}
JSON 作为一种数据存储格式从诞生以来日益流行,现在很多编程语言都有现成的库来解析和生成 JSON 对象。从 ECMAScript 5 开始,就已经有了全局的 JSON 对象。
 (图为在 Google 浏览器的控制台中打印输出 JSON 对象)
该对象的一些方法,可以将 JavaScript 中的字符串转为 JSON 对象或者将 JSON 对象转换为字符串。
1. JSON 对象转为字符串
使用的方法为JSON.stringify()
,示例如下:
let person = {
"name" : "yan",
"age" : 18,
"gender" : "male",
}
let str = JSON.stringify(person);
console.log(str);
// {"name":"yan","age":18,"gender":"male"}
如果一个字面量对象里面包含了方法,那么在使用JSON.stringify()
方法将其转为字符串时,会直接忽略掉对象里面的方法,如下:
let person = {
name : "yan",
age : 18,
walk : function(){
console.log("I'm walking");
}
}
let str = JSON.stringify(person);
console.log(str); // {"name":"yan","age":18}
2. 字符串转为 JSON 对象
使用的方法为JSON.parse()
方法。但是需要注意的一个问题是,当我们要将一个字符串转为 JSON 对象时,必须要保证字符串的格式要和 JSON 的格式一模一样,否则无法进行转换,示例如下:
let person = '{"name":"yan","age":18,"gender":"male"}';
let obj = JSON.parse(person);
console.log(obj);
// { name: 'yan', age: 18, gender: 'male' }
let person2 = '{name:"yan",age:18,gender:"male"}'; // 因为格式不一致,所以会报错
let obj2 = JSON.parse(person2);
console.log(obj2);
// SyntaxError: Unexpected token n in JSON at position 1
Comments