[英]How to convert JS object to JSON encoded string?
我已经试过了,但它不能正常工作。 它只是给出常规的 JS 字符串,而不是 JSON 格式
function convert(obj) {
let ret = "{";
for (let k in obj) {
let v = obj[k];
if (typeof v === "function") {
v = v.toString();
} else if (v instanceof Array) {
v = JSON.stringify(v);
} else if (typeof v === "object") {
v = convert(v);
} else {
v = `"${v}"`;
}
ret += `\n ${k}: ${v},`;
}
ret += "\n}";
return ret;
}
输入:
const input = {
rules3: {
fn1: ()=> {
setTimeout(function abc() {console.log("aaaaaaaa")}, 3000);
}
}
}
预计 output:
我需要 JSON.parse 转换后的字符串。 所以下面是一个预期的例子 output
'const input = {
"rules3": {
"fn1": ()=> {
"setTimeout(function abc() {console.log("aaaaaaaa")}, 3000)"
}
}
}'
如您所知,JSON 不支持函数和正则表达式。 看起来您想对 function 进行字符串化,并存储为 JSON。您可以将JSON.stringify()
function 与替换助手 function 一起使用,而不是手动进行字符串化 function:
const input = { text: 'hi', numbner: 123, array: [1, 2, 3], regex: /^-?\d+(:?\.\d+)?$/, rules3: { fn1: () => { setTimeout(function abc() { console.log("aaaaaaaa") }, 3000); } } } function replacer(key, val) { if (typeof val === 'function' || val && val.constructor === RegExp) { return val.toString(); } return val; } console.log(JSON.stringify(input, replacer, 2))
Output:
{
"text": "hi",
"numbner": 123,
"array": [
1,
2,
3
],
"regex": "/^-?\\d+(:?\\.\\d+)?$/",
"rules3": {
"fn1": "() => {\n setTimeout(function abc() {\n console.log(\"aaaaaaaa\")\n }, 3000);\n }"
}
}
以相同的方式,您可以使用替换器 function 来使用JSON.parse()
恢复 object。
请注意,由于 function 和正则表达式已转换为字符串,因此不确定什么是字符串、function 是什么以及正则表达式是什么。 因此,您可能想要注释字符串化的 function 和正则表达式以使其具有确定性。
文档:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.