繁体   English   中英

如何将JS object转为JSON编码字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM