我已经尝试过了,但它不能正常工作。它只是给出常规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);
}
}
}
预期输出:
我需要JSON。解析转换后的字符串。下面是预期输出
的示例'const input = {
"rules3": {
"fn1": ()=> {
"setTimeout(function abc() {console.log("aaaaaaaa")}, 3000)"
}
}
}'
如您所知,JSON不支持函数和正则表达式。看起来您想要将函数字符串化,并存储为JSON。您可以使用JSON.stringify()
函数和一个replacer helper函数来代替手工制作stringify函数:
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))
输出:
{
"text": "hi",
"numbner": 123,
"array": [
1,
2,
3
],
"regex": "/^-?\d+(:?\.\d+)?$/",
"rules3": {
"fn1": "() => {n setTimeout(function abc() {n console.log("aaaaaaaa")n }, 3000);n }"
}
}
以同样的方式,您可以使用replacer函数来使用JSON.parse()
恢复对象。
注意,因为函数和正则表达式都被转换成字符串,所以不能确定哪些是字符串,哪些是函数,哪些是正则表达式。因此,您可能需要注释字符串化函数和正则表达式,以使其具有确定性。
文档:
JSON.stringify()
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringifyJSON.parse()
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse