前言
  这是一道笔试题,要求模拟实现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);

 

最新文章

  1. 20145316&amp;20145229实验四:驱动程序设计
  2. html,body最顶层元素.
  3. 剖析SSH核心原理(一)
  4. iOS 中有用的开源库
  5. ubuntu 映射网络驱动器到本地
  6. Project Management - 2) Estimate Your Work
  7. Power of Cryptography
  8. -Xms -Xmx -Xmn -Xss -XX:
  9. MFC模态对话框的消息循环
  10. 我的Cocos2dx开发模式
  11. oracle数据库显示所有用户方法
  12. javascript 中的console.log有什么作用啊?
  13. Spring中关于AOP的实践之Scheme方式实现通知
  14. 通过URL传递中文参数的乱码处理
  15. Monkey测试简介【转载】
  16. java中的锁之AbstractQueuedSynchronizer源码分析(二)
  17. c# 7.0 学习笔记
  18. bzoj2946
  19. 10款流行的Markdown编辑器,总有一款适合你
  20. 6.1 函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数

热门文章

  1. Struts2中文乱码问题 过滤器源码分析
  2. FEL,项目实装记录
  3. HDU2222Keywords Search AC_自动机
  4. 牛客小白月赛4 B 博弈论 思维 字符串
  5. 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
  6. NOIP 2005 等价表达式 题解
  7. 初步认识JWT
  8. sql 单表distinct/多表group by查询去除重复记录
  9. Unity3D_05_理解Unity的新GUI系统(UGUI)
  10. windows下docker与.net core 的简单示例