深入探究JSON.stringify()方法:定制化输出JSON数据

JSON.stringify() 是 JavaScript 中的一个函数,用于将 JavaScript 对象或值转换为 JSON 格式的字符串。

在使用 JSON.stringify() 方法时,我们需要传入一个 JavaScript 对象或值作为参数,然后该方法会将其转换为 JSON 格式的字符串。如果对象中包含了函数、未定义的值、循环引用等特殊类型的数据,那么在转换时会忽略这些数据。

基本用法

下面是一个使用 JSON.stringify() 方法的示例:

javascript 复制代码
const obj = {
    name:'张三',
    age: 20,
    gender:'男',
    hobbies:['游泳','篮球','阅读'],
    address: {
        city:'北京',
        district:'海淀区',
        street:'中关村'
    }
};
const jsonString = JSON.stringify(obj);
console.log(jsonString);

上面的示例中,我们定义了一个包含了字符串、数字、数组、对象等多种类型数据的 JavaScript 对象,并将其作为参数传入 JSON.stringify() 方法中。最后,该方法将该对象转换为 JSON 格式的字符串,并将其打印输出到控制台。

转换后的 JSON 格式的字符串如下所示:

json 复制代码
{
    "name":"张三",
    "age": 20,
    "gender":"男",
    "hobbies": [
        "游泳",
        "篮球",
        "阅读"
    ],
    "address": {
        "city":"北京",
        "district":"海淀区",
        "street":"中关村"
    }
}

高级用法

replacer 参数

replacer 是一个函数或数组,用于控制序列化过程中哪些属性应该被序列化。

  • 如果是一个函数, 则它会在序列化过程中每一个属性都被遍历到时被调用,接受两个参数:属性名和属性值。在函数中,你可以返回一个新的值,以控制序列化的结果,或者返回 undefined,以排除当前属性。
  • 如果是一个数组, 则仅序列化数组中包含的属性。
vbnet 复制代码
const person = {
    name: "Alice",
    age: 25,
    job: "Software Engineer",
    salary: 100000,
    company: "ABC Inc."
};
//使用函数控制序列化结果
const replacerFunc = (key, value) => {
    if(key === "salary" || key === "company") {
    return undefined;//排除 salary 和 company属性
    } else {
    return value;
    }
};
const jsonString1 = JSON.stringify(person, replaceerFunc)
console.log(jsonString1);
//输出:{"name":"Alice","age":25,"job": "Software Engineer"}

//使用数组控制序列化结果
const replacerArray=["name", "age", "job"];//仅包含name、age和job
const jsonString2 = JSON.stringify(person, replaceerArray)
console.log(jsonString2);
//输出:{"name":"Alice","age":25,"job": "Software Engineer"}

space 参数

参数 space 是用于控制生成 JSON 字符串的缩进和格式化的。它可以传入一个数字,表示每个缩进级别的空格数,或者传入一个字符串,用作缩进符号。

如果你不需要缩进,可以将它设为 0 或空字符串。

arduino 复制代码
const person = {
    name: "Alice",
    age:25,
    job: "Software Engineer",
    salary: 100000,
    company: "ABC Inc."
};
  • 使用数字控制缩进格式
vbscript 复制代码
const jsonStringi = JSON.stringify(person, null,2);//用2个空格缩进
console.log(jsonString1);
输出:
/*
{
  "name": "Alice",
  "age":25,
  "job": "Software Engineer",
  "salary": 100000,
  "company": "ABC Inc."
}
*/
  • 使用字符串控制缩进格式
vbscript 复制代码
const jsonString2 = JSON.stringify(person, null,,"--");//用--缩进
console.log(jsonString2);
/*
输出:
{
--"name": "Alice",
--"age": 25,
--"job": "Software Engineer",
--"salary": 10000,
--"company": "ABC Inc."
}
*/
  • 不使用缩进
vbscript 复制代码
const jsonString3 = JSON.stringify(person, null, O);//不使用缩进
console.log(jsonString3);//输出:{"name":"Alice","age":25,"job": "Software Engineer","salary": 10000,"company": "ABC Inc."

"罗马"非一日建成,"罗码"也非一帆风顺,虽然条条大路通罗马,但"罗码之路"还有待验证

相关推荐
刘发财2 分钟前
前端2秒生成500页矢量PDF,rust真的强到没朋友
前端·javascript·rust
郑州光合科技余经理34 分钟前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
梦想平凡1 小时前
百游棋牌源代码开发搭建教程(十):隔离部署、备份恢复与双端验收
java·前端·javascript·数据库·源代码管理
yume_sibai2 小时前
06-Rust Web 开发实战(Axum 框架 + 数据库 + JWT 认证 + 中间件 + 部署)
前端·数据库·rust
计算机魔术师4 小时前
特朗普上台打给黄仁勋:AI末日论是骗局,我们绝不让它发生
前端
troy1284 小时前
Python 基础语法(八):Web 后端开发、数据分析与可视化、网络爬虫、人工智能 / 大模型应用
前端·python·数据分析
计算机魔术师4 小时前
CEO说要慢下来,黑客说别做梦了——同一篇论文,两种命运
前端
kyriewen5 小时前
我花3天抓了一个幽灵bug,凶手藏在第4层
前端·javascript·程序员
IT_陈寒5 小时前
Java里用Stream.parallel()翻车实录,这性能还不如单线程
前端·人工智能·后端
wangchunyu1145 小时前
JavaScript 零基础入门教程
前端