模拟实现JSON.stringiry 的格式化输出
前言
这是一道笔试题,要求模拟实现JSON.stringiry 的格式化输出,按照层级缩进,输出易读格式,即完成以下方法
JSON.stringify(jsObj, null, 4); // 缩进4个空格
如输入:
{a:1,b:[{bb:1},{bb:2}],c:"cc"}
字符打印结果:
{
"a": 1,
"b": [
{
"bb": 1
},
{
"bb": 2
}
],
"c": "cc"
}
具体实现:
function isArray(obj) {
if (Array.isArray) {
return Array.isArray(obj);
} else {
return Object.prototype.toString.call(obj) == "[object Array]";
}
}
function isObject(obj) {
return Object.prototype.toString.call(obj) == "[object Object]";
}
function isString(obj) {
return typeof obj == "string";
}
function isNull(obj) {
return typeof obj == "null";
}
function processValue(value) {
if (!isString(value)) {
if (!isNull(value)) {
return value.toString(); // 针对Number和Boolean
} else {
return null;
}
} else {
return '"' + value.toString() + '"';
}
}
function jsonStringify(value, indent) {
var indent = indent || "";
var ret = indent + "{\n";
indent += " ";
var keys = Object.keys(value);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var v = value[key];
ret += (indent + processValue(key) + ":");
if (!isArray(v) || isObject(v)) {
ret += processValue(v);
} else {
var ind = indent + " ";
for (var k = 0; k < key.length; k++) {
ind += " ";
}
if (isArray(v)) {
ret += "[\n";
for (var j = 0; j < v.length; j++) {
ret += jsonStringify(v[j], ind);
if (j == v.length - 1) {
ret += "\n";
} else {
ret += ",\n";
}
}
ret += indent + ']';
} else if (isObject(v)) {
ret += jsonStringify(v, ind);
}
}
if (i == keys.length - 1) {
ret += "\n"
} else {
ret += ",\n"
}
}
ret += indent.slice(4) + "}";
return ret;
}
var result = jsonStringify({
a: 1,
b: [{
bb: 1
}, {
bb: 2
}],
c: "cc"
});
console.log(result);

模拟实现JSON.stringiry 的格式化输出的更多相关文章
- net.sf.json日期类型格式化输出
net.sf.json 日期类型格式化输出 Date, Timestamp ; 编写工具类 package cn.jorcen.commons.util; import java.text.DateF ...
- JSON字符串控制台格式化输出 java
1.正常情况下返回的json数据格式如下: {"header":{"transSn":"e33128bb7622462ebfb2cbfcc46baa1 ...
- nodejs写入json文件,格式化输出json的方法
假如我需要把data序列化成json字符串,然后写入data.json文件中,代码如下: let str = JSON.stringify(data) fs.writeFile('data.json' ...
- python json.dumps()函数输出json格式,使用indent参数对json数据格式化输出
在python中,要输出json格式,需要对json数据进行编码,要用到函数:json.dumps json.dumps() :是对数据进行编码 #coding=gbkimport json dict ...
- tomcat及nginx相关,格式化输出,配置及日志解析
1.https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension Tomcat ...
- (Python )格式化输出、文件操作、json
本节学习Python的格式化输出,文件操作以及json的简单用法 1.格式化输出 将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答) ...
- Python进行JSON格式化输出,以及汉字显示问题
格式化输出 转载地址 https://blog.csdn.net/real_tino/article/details/76422634 问题分析: Python下json手法的json在打印查看时, ...
- 格式化输出Json对象
1.调用方式: alert(JsonUti.convertToString(jsonObj)); //jsonObj为json对象. 2.格式化输出Json对象方法定义: var JsonUti = ...
- 二、用Delphi10.3 创建一条JSON数据的第二种方法,并格式化输出
一.用Delphi10.3构造一个JSON数据的第二种方法,并格式化输出,代码如下: uses //System.JSON, System.JSON.Types, System.JSON.Writer ...
随机推荐
- [Revit]开始:编写一个简单外部命令
1 创建项目 以Visual Stidio作为开发工具,测试平台为Revit 2017 打开VS,创建一个C# .NET Framwork类库项目,选择..net框架版本为.NET Framwork ...
- safari打不开该网页,因为网址无效
Safari打开导航时,提示:safari打不开该网页 因为网址无效 解决方法:安装百度地图
- E-triples II_2019牛客暑期多校训练营(第四场)
求用n个3的倍数的数按位或出数字a的方案数有多少种(0也算3的倍数) 题解 若数b的每个二进制位上的1,在a中也为1,则称b为a的子集 容易知道任意个a的子集按位或出来的结果还是a的子集 若问题改为按 ...
- P2564 [SCOI2009]生日礼物 贪心
https://www.luogu.org/problemnew/show/P2564) 题意 有n个珠子,包括k中颜色,找出长度最小的一个区间,使得这个区间中包含所有的颜色. 思路 把n个珠子按照位 ...
- 题解 CF499A 【Watching a movie】
题意 看一部电影,从第一分钟开始看,你每次可以按下快进键,快进x分钟,电影有n个精彩片段,问看到所有精彩片段至少需要看多少分钟电影.(数据保证能看到所有精彩片段) 我们可以发现答案其实 就是间隔时间% ...
- 实现一个基于码云Storage
实现一个简单的基于码云(Gitee) 的 Storage Intro 上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式,并立了一个 flag 基于 github 或者 开源 ...
- SpringCloud学习笔记(1):Eureka注册中心
简介 Eureka是Netflix开源的基于rest的服务治理方案,分为Server端和Client端,Server端为注册中心,其他微服务通过Client端连接Server端进行服务的注册和发现. ...
- 并发之初章Java内存模型
>>>>>>博客地址<<<<<< >>>>>>首发博客<<<<< ...
- Python分布式爬虫必学框架Scrapy打造搜索引擎
Python分布式爬虫必学框架Scrapy打造搜索引擎 部分课程截图: 点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/1-wHr4dTAxfd51M ...
- Winform中在FastReport的PreviewControl预览控件中对report控件模板中控件值进行修改
场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...