阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

JS JSON.stringify()的5个使用场景详解

280次阅读
没有评论

共计 2315 个字符,预计需要花费 6 分钟才能阅读完成。

导读 JSON.stringify() 方法用于将一个值转为 JSON 字符串, 该字符串符合 JSON 格式, 并且可以被 JSON.parse() 方法还原, 下面这篇文章主要给大家介绍了关于 JS JSON.stringify() 的 5 使用场景, 需要的朋友可以参考下
前言

JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。

语法如下:

JSON.stringify(value[, replacer [, space]])
  • 第一个参数 value:将要序列化成 一个 JSON 字符串的值。
  • 第二个参数 replacer:可选参数,如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。
  • 第三个参数 space:可选参数,指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为 10。该值若小于 1,则意味着没有空格;如果该参数为字符串(当字符串长度超过 10 个字母,取其前 10 个字母),该字符串将被作为空格;如果该参数没有提供(或者为 null),将没有空格。
  • 第二个参数 replacer 为数组

    是的,JSON.stringify() 函数可以有第二个参数,它是要在控制台中打印的对象的键数组。下面来看看示例:

    const arrayData = [
        {
            id: "0001",
            type: "donut",
            name: "Cake",
            ppu: 0.55,
            batters: {
                batter: [{ id: "1001", type: "Regular"},
                    {id: "1002", type: "Chocolate"},
                    {id: "1003", type: "Blueberry"},
                    {id: "1004", type: "Devil's Food"},
                ],
            },
            topping: [{ id: "5001", type: "None"},
                {id: "5002", type: "Glazed"},
                {id: "5005", type: "Sugar"},
                {id: "5007", type: "Powdered Sugar"},
                {id: "5006", type: "Chocolate with Sprinkles"},
                {id: "5003", type: "Chocolate"},
                {id: "5004", type: "Maple"},
            ],
        },
    ];
    console.log(JSON.stringify(arrayData, ["name"])); // [{"name":"Cake"}]

    可以通过在第二个参数中将其作为数组传递仅需要打印的键,而不需要打印整个 JSON 对象。

    第二个参数 replacer 为函数

    还可以将第二个参数作为函数传递,根据函数中编写的逻辑评估每个键值对。如果返回 undefined 键值对将不会打印。请看下面示例:

    const user = {
        name: "DevPoint",
        age: 35,
    };
     
    const result = JSON.stringify(user, (key, value) =>
        typeof value === "string" ? undefined : value
    );
    console.log(result); // {"age":35}

    上述代码的输出,可以用来过滤 JSON 数据的属性值。

    第三个参数为 Number

    第三个参数控制最终字符串中的间距。如果参数是一个数字,则字符串化中的每个级别都将缩进此数量的空格字符。

    const user = {
        name: "DevPoint",
        age: 35,
        address: {city: "Shenzhen",},
    };
     
    console.log(JSON.stringify(user, null, 4));

    输出打印的字符串格式如下:

    {
        "name": "DevPoint",
        "age": 35,
        "address": {"city": "Shenzhen"}
    }
    第三个参数为 String

    如果第三个参数是一个字符串,它将被用来代替上面显示的空格字符。

    const user = {
        name: "DevPoint",
        age: 35,
        address: {city: "Shenzhen",},
    };
     
    console.log(JSON.stringify(user, null, "|---"));

    输出打印的字符串格式如下:

    {
    |---"name": "DevPoint",
    |---"age": 35,
    |---"address": {
    |---|---"city": "Shenzhen"
    |---}
    }
    toJSON 方法

    有一个名为 toJSON 的方法,它可以是任何对象的一部分作为其属性。JSON.stringify 返回此函数的结果并将其字符串化,而不是将整个对象转换为字符串。

    //Initialize a User object
    const user = {
        name: "DevPoint",
        city: "Shenzhen",
        toJSON() {return ` 姓名:${this.name},所在城市:${this.city}`;
        },
    };
     
    console.log(JSON.stringify(user)); // "姓名:DevPoint,所在城市:Shenzhen"

    到此这篇关于 JS JSON.stringify() 使用场景详解的文章就介绍到这了

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥玩云-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2315字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19351
    评论数
    4
    阅读量
    7971451
    文章搜索
    热门文章
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

    再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

    再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
    飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

    飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

    飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

    4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

      4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
    颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

    颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

      颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
    如何安装2026年最强个人助理ClawdBot、完整安装教程

    如何安装2026年最强个人助理ClawdBot、完整安装教程

    如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...
    如何免费使用强大的Nano Banana Pro?附赠邪修的用法

    如何免费使用强大的Nano Banana Pro?附赠邪修的用法

    如何免费使用强大的 Nano Banana Pro?附赠邪修的用法 前言 大家好,我是星哥,今天来介绍谷歌的 ...
    每年0.99刀,拿下你的第一个顶级域名,详细注册使用

    每年0.99刀,拿下你的第一个顶级域名,详细注册使用

    每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    还在找免费服务器?无广告免费主机,新手也能轻松上手!

    还在找免费服务器?无广告免费主机,新手也能轻松上手!

    还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
    星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

    星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

    星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
    星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

    星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

    星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
    你的云服务器到底有多强?宝塔跑分告诉你

    你的云服务器到底有多强?宝塔跑分告诉你

    你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...