03月09, 2019

JS基础(6)——对象(3)——JSON

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 对象。

-w536 (图为在 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

本文链接:http://www.yanhongzhi.com/post/js-basis-19.html

-- EOF --

Comments