简介
这篇文章介绍一下怎样把JavaScript对象序列化为JSON。尽管JSON格式是建立在JavaScript对象的语法之上,然而它们并不相同,这意味着并不是所有的JavaScript对象都可以完全转化为JSON。
代码示例
我们首先来定义一个简单的JS对象,用来表示一个人的相关信息,这个对象有下面的字段:
- name – a string;
- age – a number;
- birthDate – a date;
- languages – an array of strings.
const jsObject = {
name: "Todd",
age: 20,
birthDate: new Date(),
languages: ["Chinese", "English"]
}
要把这个对象转化为JSON字符串,只需要调用JSON对象的stringify方法。注意,JSON是标准的内建对象,不需要在代码中引入。
console.log(JSON.stringify(jsObject));
// {"name":"Todd","age":20,"birthDate":"2022-06-06T05:54:49.460Z","languages":["Chinese","English"]}
序列化得到的是一种压缩格式,在网络传输时开销更小,因为它没有不必要的字符。如果我们想要一种更易读的形式输出,可以借助一些stringify方法支持的额外参数。
JSON.stringify(jsObject, null, 3)
这个方法可以接收三个参数,第二个参数是一个可选参数 replacer function,可以改变处理的过程,这里我们用不到传 null。
第三个参数也是可选参数,接收一个数字作为空白字符数插入到结果中,可以使结果可读性更强。需要注意的是数值范围在 1-10之间,大于10会默认取10。
console.log(JSON.stringify(jsObject, null, 3));
/*
{
"name": "Todd",
"age": 20,
"birthDate": "2022-06-06T05:54:49.460Z",
"languages": [
"Chinese",
"English"
]
}
*/
function 并不是合法的JSON值,意味着在序列化的过程中会被省略,如果在数组中会转为null
const objectWithFunction = {
someProperty: "some value",
func: () => console.log("test"),
arrayOfFunctions: [
() => console.log("test"),
() => console.log("test2")
]
}
console.log(JSON.stringify(objectWithFunction, null, 3));
/*
{
"someProperty": "some value",
"arrayOfFunctions": [
null,
null
]
}
*/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。