模拟实现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 ...
随机推荐
- codeforces 361 C. Levko and Array Recovery(暴力+思维)
题目链接:http://codeforces.com/contest/361/problem/C 题意:对一个数列有这么两个操作 1.(1,l,r,p)..将区间[l,r]所有数都加上p 2.(2,l ...
- 百度之星 资格赛 1003 度度熊与邪恶大魔王 dp(背包)
度度熊与邪恶大魔王 Accepts: 1141 Submissions: 6840 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...
- 如何配置nginx和tomcat实现反向代理?
什么是反向代理 通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务 ...
- AOE工程实践-银行卡OCR里的图像处理
作者:杨科 近期我们开发了一个银行卡 OCR 项目.需求是用手机对着银行卡拍摄以后,通过推理,可以识别出卡片上的卡号. 工程开发过程中,我们发现手机拍摄以后的图像,并不能满足模型的输入要求.以 And ...
- 网络流---最大流(Edmond-Karp算法)的学习
先上个代码,等有空补充详解 #include<iostream> #include<cstdio> #include<cstring> #include<cm ...
- python实现持久化存储,操作表格,时间戳
import xlrd,xlwt,pickle,time,datetime book = xlrd.open_workbook("练习.xlsx") sheet1 = book.s ...
- 【LeetCode】103# 二叉树的锯齿形层次遍历
题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null,null,15,7], ...
- Django与mongodb数据库的连接
1.最开始需要下载一个第三方模块:mongoengine 2.下载完成之后,需要在settings中完成配置(在DATABASES后面,别问我为什么,问了我也不告诉你...) connect中传入的是 ...
- [币严区块链]数字货币交易所之以太坊(ETH)钱包对接(四) 使用web3j对接以太坊钱包
本文给大家介绍了 Web3j Java 版本的框架的基本使用,大家可根据本文的内容进行扩展性的练习,对其他 API 的使用进行尝试. 使用web3j对接以太坊钱包 一.开发准备事项 启动 Geth 此 ...
- C# HTTP网络常用方法封装
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Regi ...