模拟实现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 ...
随机推荐
- DEVOPS基础
转自:http://www.scrumcn.com/agile/scrum-knowledge-library/agile-development.html#tab-id-7 DevOps是一组过程. ...
- ICPC 2018 Asia Hanoi Regional Contest
A. Amazing Adventures B. Bipartite Battle solved by rdc 135min sdcgvhgj 打表找出了规律,发现 sg 值只和点数和边数的奇偶性有关 ...
- 现代 JavaScript 教程到底是什么?
手册与规范 <现代 JavaScript 教程>是开源的现代 JavaScript 从入门到进阶的优质教程,它旨在帮助你逐渐掌握 JavaScript 这门语言.但是一旦你已经熟悉了这门语 ...
- MySQL EXPLAIN结果集分析 - 附带大量案例
大量实例助你看懂Explain的输出内容,轻松搞定慢查询 EXPLAIN:查看SQL语句的执行计划 EXPLAIN命令可以帮助我们深入了解MySQL基于开销的优化器,还可以获得很多可能被优化器考虑到的 ...
- 201871010134-周英杰《面向对象程序设计(java)》第一周学习总结
项目 内容 java https://www.cnblogs.com/nwnu-daizh/ 任课老师博客下 https://www.cnblogs.com/nwnu-daizh/p/11435127 ...
- odoo12从零开始:一、安装odoo运行环境(windows10)
前言 鉴于好多朋友说没有mac电脑,windows开发其实也差不了多远,只是个人习惯问题,而且吧,windows的电脑其实配环境也挺快的其实,我在这里再稍微补一个比较简单的windows环境部署,希望 ...
- 结合生活案例实现rabbitmq消息通信
title: 基于springboot实现rabbitmq消息通信 date: 2019-09-11 09:00:30 tags: - [rabbitmq] categories: - [spring ...
- mariadb+haproxy实现负载均衡(一)
根据实际情况,数据生产无论是量还是使用地方都在稳步增加,单一服务器的稳定性也越来越受到关注,所以想提前做好技术准备. 因为之前就安装好了数据库,现在只讨论haproxy的安装及相关使用. haprox ...
- Docker搭建disconf环境,三部曲之三:细说搭建过程
Docker下的disconf实战全文链接 <Docker搭建disconf环境,三部曲之一:极速搭建disconf>: <Docker搭建disconf环境,三部曲之二:本地快速构 ...
- spring boot监听器的实现
spring boot监听器的实现 如下所示: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContex ...