当前位置: 首页 > article >正文

js 简单模拟JSON.stringify 功能

作用:序列化成 一个 JSON 字符串的值

function stringifyJSON(value) {
    if (typeof value === "string") {
      //处理\和",加上""
      return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
    }
    if (typeof value === "boolean") {
      return value.toString();
    }
    if (typeof value === "number") {
    	//typeof value === "bigint" 无法序列化,返回'null'
      //如果参数是 NaN,正无穷大或者负无穷大,会返回false
      return isFinite(value) ? value.toString() : "null";
    }
    if (Array.isArray(value)) {
      const arrayStr = value.map((item) => stringifyJSON(item)).join(",");
      //加上[]
      return `[${arrayStr}]`;
    }
    if (typeof value === "object") {
      //null 类型也是 object
      if (value === null) {
        return "null";
      }
      //对象所有key
      const keys = Object.keys(value);
      const objectStr = keys
        .map((key) => {
          //值stringifyJSON
          const val = stringifyJSON(value[key]);
          //重新组合,key加上""
          return `"${key}":${val}`;
        })
        .join(",");
      //加上{}
      return `{${objectStr}}`;
    }
    //undefined,symbol,bigint
    return "null";
  }

使用示例

const obj = {
    name: "小米",
    money: 2000,
    isSale: false,
    type: ["note1", "note2"],
    address: null,
    chip:undefined,
    getMoney: function () {
      return this.name;
    },
  };
  console.log("obj1", stringifyJSON(obj));
  //数组,undefined、任意的函数以及symbol值在序列化的过程中会被转换成 null
  //非数组,undefined、任意的函数以及symbol值在序列化的过程中会被忽略
  console.log("obj2", JSON.stringify(obj));

具体,参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify


http://www.kler.cn/a/370721.html

相关文章:

  • mac 安装mongodb
  • python——句柄
  • Re78 读论文:GPT-4 Technical Report
  • XML序列化和反序列化的学习
  • 使用 Java 实现基于 DFA 算法的敏感词检测
  • Digital Document System (DDS)
  • 初始JavaEE篇——多线程(4):wait、notify,饿汉模式,懒汉模式,指令重排序
  • [vulnhub]Kioptrix: Level 1.2 (#3)
  • 2024年9月电子学会青少年软件编程Python等级考试(三级)真题试卷
  • 赛博威携手百度智能云,开启数字营销新未来
  • Docker Compose一键部署Spring Boot + Vue项目
  • CSS3新增长度单位
  • 在Ubuntu(Linux)系统下安装Anaconda3
  • Kubernetes固定Pod IP和Mac地址
  • 手机号二要素核验 API 对接说明
  • 【04】RabbitMQ的集群机制
  • Ajax:表单 模板引擎
  • smuge error
  • 2025秋招八股文--服务器篇
  • 我接触csdn中的c++的时间
  • 简记Vue3(二)—— computed、watch、watchEffect
  • 【蓝桥杯选拔赛真题78】python电话号码 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析
  • 使用 FastGPT 工作流实现 AI 赛博算卦,一键生成卦象图
  • 【Python小游戏12——愤怒的小鸟】
  • 【MySQL】实战篇—项目需求分析:ER图的绘制与关系模型设计
  • Linux命令 用户操作简介