简介

这篇文章介绍一下怎样把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
   ]
}
*/

来了老弟
508 声望31 粉丝

纸上得来终觉浅,绝知此事要躬行


引用和评论

0 条评论