使用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. 关于LZO无法平台上压缩,但是数据需要使用平台压缩的问题解决

    我们做hive查询时候经常会出现出数过慢的问题,于是采用了LZO压缩,再在压缩块上做索引的方式去解决这个问题,但是也引入了新的问题点 lzo本身的压缩功能只能在linux上压缩再上传到HDFS平台,供 ...

  2. 转载:Jsoup常用方法功能介绍(html解析器)

    jsoup 的作用:是一款 Java 的HTML 解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据 ...

  3. @Restcontroller与@controller区别

    @RestController注解相当于@ResponseBody + @Controller合在一起的作用. 1)如果只是使用@RestController注解Controller,则Control ...

  4. Ubuntu 14.04 Ruby 2.3.3 安装

    在Ubuntu 14.04通过下载Ruby源码包进行安装. 第一步,更新apt-get sudo apt-get update 通过apt-get安装ruby依赖 sudo apt-get insta ...

  5. 使用由 Python 编写的 lxml 实现高性能 XML 解析

    lxml 简介 Python 从来不出现 XML 库短缺的情况.从 2.0 版本开始,它就附带了 xml.dom.minidom 和相关的 pulldom 以及 Simple API for XML ...

  6. python使用suds来调用webservice

    对于python仅作为客户端调用webservice的情况,推荐使用suds库来完成,比起zsi,soapy之类,它可以说是相当轻量级,使用非常方便. 安装suds建议使用easy_insall来做. ...

  7. [转]iMPACT Spartan-6 FPGA - "WARNING:iMPACT:2217-Error shows in the status register, CRC Error bit is Not 0"

    AR# 45304 iMPACT Spartan-6 FPGA - "WARNING:iMPACT:2217-Error shows in the status register, CRC ...

  8. NMS 和 Soft-NMS

    转自https://zhuanlan.zhihu.com/p/42018282 一 NMS NMS算法的大致思想:对于有重叠的候选框:若大于规定阈值(某一提前设定的置信度)则删除,低于阈值的保留.对于 ...

  9. 构建工具Bazel入门

    Bazel入门   原文:http://bazel.io/docs/getting-started.html 译者:chai2010 安装 安装过程请参考: http://bazel.io/docs/ ...

  10. JMETER远程运行_多机联合负载

    JMETER远程运行_多机联合负载 远程运行是用一台JMeter控制机控制远程的多台机器来产生负载.控制机与负载机之间通过RMI方式来完成通信.在负载机上运行Agent程序(启动命令是%JMETER_ ...