一文弄懂什么是 JSON

JSON


JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据

在 JSON 之前,我们都是使用 XML 来传递数据(XML 翻译就是可扩展标记语言,是一种纯文本格式,适合在网络上传递数据),但是随着 XML 越来越复杂,人们开始发明更加简便的数据交换格式,终于在 2002 年道格拉斯·克罗克福特(Douglas Crockford)发明了 JSON,我们只需要记住,JSON 是 JavaScript 的一个子集,可以直接在 JavaScript 中使用 JSON 实现序列化和反序列化


先看看 JSON 中的数据类型,其实和 JavaScript 基本一致(Attention 加粗的字!)

类型名称 解释说明
number 数值类型,和 JavaScript 的 number 一样
boolean 布尔型,只有 true 和 false 两种值
string 字符串类型,不用多说了吧,但是注意 一定要使用 " ",不能用 ’ '
null 空值,就是什么都没有
array 数组,使用 [] 括起来的数据
object 对象,同 JavaScript 中对象的写法,使用 {},其中每一个健使用 " "
/* JSON 标准格式:
{
	"键名称1": 100,
	"键名称2": "我是字符串,使用双引号",
	"键名称3": true,
	"键名称4": null,
	"键名称5": [200, "数组中字符串", null],
	"键名称6": {"对象健名称1": 200, "对象健名称2": "我也是字符串"}
} */

//看不懂怎么办(我书读的少,你别骗我),那我下面写一个例子就能明白了
'use strict'

let Mike = {
    
    
    name: 'Mike',
    age: 21,
    school: "清华大学"
};

let obj = {
    
    
    key1: 100,
    key2: 'Hello world',
    key3: false,
    key4: null,
    key5: [200, '300', [true, false]],
    key6: Mike
};

/* 将 JavaScript 对象转换成 JSON 字符串,实现序列化:
JSON.stringify(value, replacer, space)
value:		待序列化的对象;

replacer:	控制如何筛选对象的键值,可以是函数或者数组(可选);
			数组里可以放想要筛选的键值,例如["key1", "key2"],注意请使用 ' ' 或者 " "
            函数就是处理键值,比方说可以在变成 JSON 字符串的时候把所有的英文键改成大写
             
space:		输出文本添加缩进、空格和换行符(可选)
			就是让格式好看点 */

let obj_JSON = JSON.stringify(obj, null, '\n');		//使用一个空格填充
console.log(obj_JSON);



/* 将字符串变成 JavaScript 对象,实现反序列化
JSON.stringify(value, reviver) 
value:待转换的字符串;

reviver:和 replacer 蛮像的,但是只能是函数(可选)*/

let obj_JS_object = JSON.parse(obj_JSON);
console.log(obj_JS_object);

控制台输出结果:

31



重点注意:

  • 即使对象中的字符串使用 ’ ',转换成 JSON 后也会变成 " "
  • 会给每一个键加上 " "


其实掌握前面的知识点对于初学者就已经够了,下面是补充知识

/* 上边我们介绍了可以设置 stringify() 函数的 replacer 参数,在一定程度上控制序列化的结果
   现在我们可以完全实现自定义序列化,那就是使用 toJSON() 函数:toJSON() 函数可以返回一个 JSON 字符串 */

/* 对于下面的 Book 对象,现在我只想序列化 name 和 price */
//1、通过设置 replacer 的方法
let Book = {
    
    
    name: '入门 JavaScript',
    ISBN: 12345678901234,
    price: 99
};

let Book_JSON = JSON.stringify(Book, ["name", "price"]);
console.log("使用 replacer 实现自定义序列化 ↓↓↓");
console.log(Book_JSON);



//2、在 Book 对象内部重写 toJSON() 函数

let Book = {
    
    
    name: '入门 JavaScript',
    ISBN: 12345678901234,
    price: 99,
    //重写 toJSON() 函数,直接返回我们自定义的结果(只要符合格式要求,键值名字随便改,下面我就把首字母变成中文,但是尽量不要使用中文,这里只是为了示范)
    toJSON: function () {
    
    
        return {
    
    
            "书名": "入门 JavaScript",
            "价格": 99
        }
    }
};

let Book_JSON = JSON.stringify(Book);
console.log("重写 toJSON() 函数实现自定义序列化 ↓↓↓");
console.log(Book_JSON);

结果展示

32


33


请注意,一旦重写了 toJSON() 函数,如果还想设置 replacer 参数,这是不可行的。你可以理解成优先级的问题

那么关于 JSON 我们先聊这么多,有个概念就行,未来使用多了自然而然就熟了

猜你喜欢

转载自blog.csdn.net/qq_52174675/article/details/122648130