将对象转换为JSON字符串,即手写JSON.stringify

这篇具有很好参考价值的文章主要介绍了将对象转换为JSON字符串,即手写JSON.stringify。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分析:

  1. Date将转为string
  2. undefined、Symbol会直接过滤掉,但如果是数组项是undefined、Symbol、Function,那么则返回null
  3. 正则RegExp会返回空对象{}
  4. NaN、Function、null会返回null,但是呢,function会被过滤掉
  5. Infinity会转为null
  6. 如果是数组的话,返回的是数组的序列化
  7. string返回原始值
  8. number、boolean则返回string
  9. Map/Set/WeakMap/WeakSet会返回空对象{}
  10. 接受三个参数,第一个是要序列化的变量,第二个是function/array,第三个是间距
    上代码:
function stringify(obj, fnOrArr) {
    if (typeof obj === 'function') {
        return undefined;
    }
    if (typeof obj === 'symbol') {
        return undefined;
    }
    if (obj === undefined) {
        return undefined;
    }
    if (typeof obj === 'number' && isNaN(obj)) {
        return 'null';
    }
    if (obj === Infinity) {
        return 'null';
    }
    if (obj === null) {
        return 'null';
    }
    if (Object.prototype.toString.call(obj) === '[object Date]') {
        return `'${ obj.toJSON() }'`;
    }
    if (Object.prototype.toString.call(obj) === '[object RegExp]') {
        return '{}';
    }
    if (typeof obj !== 'object') {
        return typeof obj === 'string' ? `'${ obj }'` : obj;
    }
    if (Array.isArray(obj)) {
        const arr = obj.map((list) => {
            if (list === undefined || typeof list === 'symbol' || typeof list === 'function') {
                return 'null';
            } else {
                return `${ stringify(list) }`
            }
        });
        return `'[${ arr.join(',')}]'`;
    }
    const keys = Object.keys(obj);
    const objArr = keys.map((list) => {
        // 数组内的 undefined、Symbol、Function 转为null
        if (stringify(obj[list]) !== undefined && obj[list] !== undefined) {
            return `"${ list }": ${ stringify(obj[list]) }`;
        }
    })
    // 过滤undefined
    return `{ ${ objArr.filter(list => list !== undefined).join(',') }}`;
}

示例:

const map = new Map();
map.set('name', 'Jerry');
const set = new Set();
set.add('age', 32);
const weakMap = new WeakMap();
const a = {};
weakMap.set(a, 'Female');
const weakSet = new WeakSet();
const b = {};
weakSet.add(b, 'Beijing');

const obj = {
    regexp: new RegExp(),
    today: new Date(),
    fn: function (name) {
        console.log('name:', name);
    },
    name: null,
    age: undefined,
    infinity: Infinity,
    nan: NaN,
    sex: Symbol('Male'),
    staff: [ "Jerry",123, () => {}, Symbol("Sina"), undefined, null, NaN, ],
    map: map,
    set: map,
    weakMap: weakMap,
    weakSet: weakSet,
}

使用JSON.stringify得到的是:

'{"regexp":{},"today":"2023-06-27T02:51:41.607Z","name":null,"infinity":null,"nan":null,"staff":["Jerry",123,null,null,null,null,null],"map":{},"set":{},"weakMap":{},"weakSet":{}}'

使用stringify得到的是:

'{ "regexp": {},"today": '2023-06-27T02:51:41.607Z',"name": null,"infinity": null,"nan": null,"staff": '['Jerry',123,null,null,null,null,null]',"map": { },"set": { },"weakMap": { },"weakSet": { }}'

这个stringify不是很完善的一个方法,和原生JSON.stringify还是有一定的差距,JSON.stringify是可以接受三个参数的,我这边暂不支持,后续再加吧。文章来源地址https://www.toymoban.com/news/detail-514129.html

到了这里,关于将对象转换为JSON字符串,即手写JSON.stringify的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序开发——json对象和字符串转换

    JSON对象和字符串的互转 注意事项 1、JSON操作时一定要保证是JSON格式的字符串,或对象。 报错如下: 原代码 1)JSON对象转字符串 2)JSON字符串转对象 解决:JSON字符串转对象时,字符串值应该是 跳转设置是:“…?item=”+jsonstr,即字符参数是 item ,所以转换时要取值 options

    2024年02月11日
    浏览(51)
  • java将json字符串数据转换为List对象

    方法一:使用Jackson库 pom.xml文件中添加以下依赖: 转换之后直接可以用list操作了 方法二:使用Gson库 res: json格式的数据 方法二比方法一使用起来更简便一点

    2024年02月21日
    浏览(53)
  • Java 解析多层嵌套json数据及json字符串与对象的相互转换

    本文主要介绍java解析多层嵌套json数据以及字符串与JSON对象之间的相互转换,包括:json字符串的取值,json对象与字符串的相互转换,字符串转化为java对象,字符串转化为javaList列表等。 提示:以下是本篇文章正文内容,下面案例可供参考 数据格式:JSON实际上就是键值对(

    2024年02月04日
    浏览(63)
  • Java中的List<T>对象与Json格式的字符串的相互转换

    在这里我随便举一个例子 OK,以上就是互相转换的过程 我使用的场景是在订单的订单列表项这里,涉及到数据库相应字段数据的存放与提取,我的做法是,将List转换为Json格式字符串存入,取时再将Json格式转为List

    2024年02月15日
    浏览(67)
  • <Java工具类>json字符串、List Map,List 对象转换为相应的JavaBean对象

    依赖: 工具类(直接上代码): 使用场景: (1).使用泛型方法:把json字符串转换为相应的JavaBean对象 ; 一般用于:Controller层: 例如: (2).List Map转换List 对象:如List,将第二个参数传递为Student对象; (3).List 对象转换List Map:

    2024年02月12日
    浏览(65)
  • 【JavaSE专栏88】Java字符串和JSON对象的转换,转来转去就是这么玩!

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 JSON 的概念,以及 Java 中 JSON 对象和字符串的转换方法,并给出了样例代

    2024年02月04日
    浏览(58)
  • jquery和php json字符串转数组对象 和 数组对象转json字符串

    要实现从对象转换为 JSON 字符串,使用 JSON.stringify( ) 方法: 要实现从 JSON 转换为对象,使用 JSON.parse() 方法: 数组变字符串 字符串变数组 json转数组   json_decode(  string $json ,  bool $assoc = false ,  int $depth = 512 ,  int $options = 0 ) $json:待解码的 json string 格式的字符串。这个函数

    2024年02月13日
    浏览(122)
  • JSON字符串转换

    大家好 , 我是苏麟  , 今天带来一个JSON序列化库 Gson .  GitHub 地址 : GitHub - google/gson: A Java serialization/deserialization library to convert Java Objects into JSON and back java 中 json 序列化库有很多: gson (谷歌的) fastjson (阿里的) jackson kryo cheshire json-simple ......  根据 maven repository 中使用情况

    2024年02月12日
    浏览(44)
  • Java中如何将字符串转换为JSON格式字符串

    Java中如何将字符串转换为JSON格式字符串 在Java编程中,我们经常需要处理JSON数据格式。有时候,我们需要将一个普通的字符串转换为JSON格式的字符串。幸运的是,Java提供了多种方法来实现这个目标。在本文中,我将介绍两种常见的方法来将字符串转换为JSON格式字符串。 方

    2024年02月06日
    浏览(58)
  • Python 字符串转换为 JSON

    Python 字符串转换为 JSON JSON(JavaScript Object Notation)是一种常用的数据交换格式,它以文本形式表示结构化的数据,并且易于阅读和编写。在Python中,可以使用内置的json模块来将字符串转换为JSON格式。本文将介绍如何将Python字符串转换为JSON,并提供相应的源代码示例。 首先

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包