模拟实现JSON.stringiry 的格式化输出
2024-09-01 09:23:50
前言
这是一道笔试题,要求模拟实现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);
最新文章
- 20145316&;20145229实验四:驱动程序设计
- html,body最顶层元素.
- 剖析SSH核心原理(一)
- iOS 中有用的开源库
- ubuntu 映射网络驱动器到本地
- Project Management - 2) Estimate Your Work
- Power of Cryptography
- -Xms -Xmx -Xmn -Xss -XX:
- MFC模态对话框的消息循环
- 我的Cocos2dx开发模式
- oracle数据库显示所有用户方法
- javascript 中的console.log有什么作用啊?
- Spring中关于AOP的实践之Scheme方式实现通知
- 通过URL传递中文参数的乱码处理
- Monkey测试简介【转载】
- java中的锁之AbstractQueuedSynchronizer源码分析(二)
- c# 7.0 学习笔记
- bzoj2946
- 10款流行的Markdown编辑器,总有一款适合你
- 6.1 函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数
热门文章
- Struts2中文乱码问题 过滤器源码分析
- FEL,项目实装记录
- HDU2222Keywords Search AC_自动机
- 牛客小白月赛4 B 博弈论 思维 字符串
- 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
- NOIP 2005 等价表达式 题解
- 初步认识JWT
- sql 单表distinct/多表group by查询去除重复记录
- Unity3D_05_理解Unity的新GUI系统(UGUI)
- windows下docker与.net core 的简单示例