使用JSON.stringify的思考

使用过JSON对象的程序员最常做的一项工作便是,将JSON对象转化为字符串。该字符串的用途很多,例如可以使用在WEB的URL中,在多个页面间进行传递。


const obj = { id: 1, name: 'object' };
const jsonStr = JSON.stringify(obj); // 转换为字符串
const json = JSON.parse(jsonStr); // 解析字符串为JSON对象

对于这个转换过程我们用的太得心应手,所以很少再去思考这中间是否还有需要优化的地方。
其实只要稍微深入思考一点,即使不读源代码,我们也能得出这样一个结论:在JSON对象转化为字符串时,是需要去识别某种模式的。

  • 对于string类型,需要用双引号(")去标注
  • 对于number类型,不需要标注
  • 对于object类型,它的每个属性间需要用逗号(,)去分隔,并且需要双引号(")进行标注
  • 对于array类型,则还需要加上"["和"]"来表示

例如:


const obj = [{ id: 1, name: 'kobe' }, { id: 2, name: 'wade' }];
const jsonStr = JSON.stringify(obj); // 结果为:[{"id":"1,"name":"kobe"},{"id":2,"name":"wade"}]

所以,如果要你去实现这样一个stringify的过程,这些类型的识别和标注都是不可避免的花销。

使用fast-json-stringify

就是在这样一个逻辑小片段上,fast-json-stringify想到了提高stringify效率的方案:提前定义要转换对象的模式,那么就可以省去解析模式的时间开销。


const fastJson = require('fast-json-stringify');
const stringify = fastJson({
title: 'player',
type: 'object',
properties: {
name: { type: 'string' },
position: { type: 'string' },
age: { type: 'integer' }
}
});
console.log(stringify({ name: 'kobe', position: 'SG', age: 39 })); // {"name":"kobe","position":"SG","age":39}

从官网的介绍来看,在某些情况下使用fast-json-stringify的效果可以比JSON.stringify快接近10倍!

使用场景

基于fast-json-stringify的优化内容,我们很容易得出这样一个结论:在所有经常需要对某些固定模式进行stringify的场合,都适合使用fast-json-stringify。因为模式是固定的,那么定义模式的空间开销一定比使用该模式生成字符串的时间开销代价要小很多。

来源:https://segmentfault.com/a/1190000017337202

使用fast-json-stringify代替JSON.stringify的更多相关文章

  1. JSON.parse() 和 JSON.stringify()

    JSON.parse()和JSON.stringify()   1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf& ...

  2. 浅谈JSON.parse()、JSON.stringify()和eval()的作用

    (1)JSON.parse 函数 var json = '{"name":"GDT","age":23,"University&q ...

  3. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式

    arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...

  4. 有关javascript中的JSON.parse和JSON.stringify的使用一二

    有没有想过,当我们的大后台只是扮演一个数据库的角色,json在前后台的数据交换中扮演极其重要的角色时,作为依托node的前端开发,其实相当多的时间都是在处理数据,准确地说就是在处理逻辑和数据(这周实习 ...

  5. JSON.parse和JSON.stringify 参数详解

    JSON.parse和JSON.stringify这两个浏览器自带(IE6/7除外)的方法平常我们经常用到,但是一般都只是用到了他们的第一个参数,比如字符串转对象:JSON.parse('{}')   ...

  6. JSON 解析器。JSON.stringify和JSON.parse

    以前用的是JavaScript  的eval. 现在JSON 提供了JSON.stringify和JSON.parse两个函数. JSON.parse用于从一个字符串中解析出json对象. JSON. ...

  7. 你不知道的JSON.stringify和JSON.parse

    json是JavaScript 对象表示法(JavaScript Object Notation),是一种简单的数据格式,类似于XML,其格式为名称/值对,数据用逗号隔开,名称必须用双引号括起来.例如 ...

  8. Jquery里面种的 JSON.parse() 与JSON.stringify() 的区别

    JSON.parse()与JSON.stringify()的区别   JSON.parse()[从一个字符串中解析出json对象] Demo: //定义一个字符串 var data='{"N ...

  9. 关于json.parse和json.stringify的区别

    json.parse是将字符串解析成json格式 而json.stringify是将json解析成字符串格式

  10. JSON.parse与JSON.stringify

    JSON:JavaScript Object Notation(JavaScript对象表示法):甚至我们就可以大致认为JSON就是Javascript的对象,只不过范围小上一些. JSON的MIME ...

随机推荐

  1. iPadOS 更新日志 - 持续更新中

    本文只是为了简单记录一下每个正式版本发布时间和更新内容,只有这个初衷,从2019年9月25日开始,将会持续更新. iPadOS 13.1 - 2019年9月25日 经全新命名的 iPadOS 是一款强 ...

  2. NOIP2018提高组初赛选讲

    说实话,这次的初赛比上一次的要简单. 不过还有些变态的题目. 在一条长度为1 的线段上随机取两个点,则以这两个点为端点的线段的期望 长度是( ). A. 1 / 2 B. 1 / 3 C. 2 / 3 ...

  3. 对json对象进行截取并按照某关键字进行排序

    json对象截取后三个数据,并按照时间的顺序进行倒叙排序. var json = [{"sent_time":"08:29:09","dist&quo ...

  4. DSMM之数据处理安全

    一.背景 数据安全生命周期分为采集.传输.存储.处理.交换.销毁几个阶段,其中数据处理阶段是整个周期的核心阶段,数据处理安全与否直接关系到整体数据安全.那么今天分享内容就是数据处理安全的相关要求和实现 ...

  5. linux管道和tee命令

    ps -ef | grep docker 等价于 ps -ef &> >(grep docker) cat a.log | tee b.txt 等价于 cat a.log & ...

  6. csdn vip文章:使用matlab模拟镜头失真

    原文地址 https://blog.csdn.net/lircsszz/article/details/80249017 最近在研究图像校正,现将镜头失真中常见的径向畸变(radial distort ...

  7. JavaWeb — Servlet(Server Applet)

    Servlet(Server Applet) 全称Java Servlet,未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 狭义的Servle ...

  8. Django项目: 6.新闻详情页

    一.功能需求分析 1.功能 新闻详情 加载评论功能 添加评论功能 二.新闻详情页 1.业务流程分析 业务流程: 判断前端传递新闻id是否为空,是否为整数,是否存在 2.接口设计 接口说明: 类目 说明 ...

  9. PHP 缓存详解

    为什么要使用缓存 一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求,应用服务器做一些计算和逻辑判断之后再请求数据库,数据库收到请求后在经过计算将数据返回给应用服务器,应用服务器再次计算后把数 ...

  10. mapreduce join操作

    上次和朋友讨论到mapreduce,join应该发生在map端,理由太想当然到sql里面的执行过程了 wheremap端 join在map之前(笛卡尔积),但实际上网上看了,mapreduce的笛卡尔 ...