如何将JS对象转换为JSON编码字符串?



我已经尝试过了,但它不能正常工作。它只是给出常规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/stringify
  • JSON.parse(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

相关内容

  • 没有找到相关文章

最新更新