如果我拥有这个对象字面量:
{a: "hello"}
有没有 JavaScript 函数可以将该对象转换为字面字符串,以便输出的是字面语法:
'{a: "hello"}'
使用JSON.stringify
,输出将会是:
'{"a": "hello"}'
{a: "hello"}
有没有 JavaScript 函数可以将该对象转换为字面字符串,以便输出的是字面语法:
'{a: "hello"}'
使用JSON.stringify
,输出将会是:
'{"a": "hello"}'
JSON.stringify
,然后使用 String.replace
进行操作,如下所示:
var jsObj =
{
abc: "hello",
bca: "allo",
cab: "dd:cc",
d: ["hello", "llo", "dd:cc"],
e: {abc: "hello", bca: "allo", cab: "dd:cc"}
};
function format(obj)
{
var str = JSON.stringify(obj, 0, 4),
arr = str.match(/".*?":/g);
for(var i = 0; i < arr.length; i++)
str = str.replace(arr[i], arr[i].replace(/"/g,''));
return str;
}
console.log(format(jsObj));
JavaScript没有内置函数可以将一个对象转换为以下两种字符串表示形式之一:
你可以为前者编写自己的函数(至少在属性名可以表示为字面量时),但是对于后者,由于JavaScript存储有关首次创建对象时使用的源代码的信息,因此不可能实现。
Ok just for fun...roll your own?
const stringify = (obj) => {
// Iterate over keys, reducing to a string
let str = Object.keys(obj).reduce((acc, cur) => {
let next = `${cur}: "${obj[cur]}"`;
return acc
? `${acc}, ${next}`
: `{${next}`;
}, '');
// Return, appending final '}'
return `${str}}`;
}
document.write(stringify({
foo:1,
bar:'seat'
}));
话虽如此,由于您的确切要求不清楚,因此我不确定这是否符合您的要求。但如果没有适用的本地解决方案,它可能是一个起点。
它确实将其转换为文字语法。您可以使用多种语法创建对象。以下两个对象声明都是有效的:
var a = {a: "a"}
var b = {"b": "b"}
function reformat(str) {
var myRegexp = /\"(.*?)\":/g;
match = myRegexp.exec(str);
while (match != null) {
str = str.replace(match[0], match[1] + ":");
match = myRegexp.exec(str);
}
return str;
}
希望能有所帮助 :)
{"a":"hello"}
是一个合法的字面对象表示,所以我不确定为什么 JSON 表示不足以满足您的目的。 - Paul