模拟实现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 ...
随机推荐
- HDOJ 4253 Two Famous Companies 二分+MST
题目意思:给出n个点,m条边,边分为两种,一种是A公司的,一种是B公司的.边上有权值, 问用n-1条边把n个点连起来的最小费用是多少,其中A公司的边刚好有k条.题目保证有解. 题解:题目意思很简单就是 ...
- hdu 2615 Division(暴力)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2615 题解:挺简单的暴力枚举,小小的分治主要是看没人写题解就稍微写一下 #include <io ...
- CodeForces Round 521 div3
A:Frog Jumping 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_i ...
- poj 2115 求线性同余方程 C Looooops(好理解欧几里德扩展定理怎么应用)
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29061 Accepted: 8360 Descr ...
- Requests库整理
一.Requests库的安装 win平台下,直接在命令行使用 pip install requests 即可进行安装 成功后测试如下 >>> import requests > ...
- HDU 1223 还是畅通工程(最小生成树prim模板)
一个很简单的prim模板,但虽然是模板,但也是最基础的,也要脱离模板熟练打出来 后期会更新kruskal写法 #include<iostream> #include<cstdio&g ...
- Django2.* + Mysql5.7开发环境整合
环境: MAC_OS 10.12 python 3.6 mysql 5.7.25 django 2.2.3 前提:python django mysql都已经安装成功可单独运行 一.settings中 ...
- FreeSql (十三)更新数据时忽略列
var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...
- C#中using的使用-以FileStream写入文件为例
场景 CS中FileStream的对比以及使用方法: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100396022 关注公众号 ...
- 手机端特有的meta标签有哪些?
3.1 meta 语法 定义和用法:name 属性把 content 属性连接到 name. 语法:name=author|description|keywords|generator|revised ...