如何从JSON.stringify中删除转义序列,以便它是人类可读的?

时间:2016-01-07 06:46:13

标签: javascript json

当我在JavaScript中的复杂对象上调用JSON.stringify()时,它会生成一个包含大量转义序列的字符串(\“,\\”等)。

如何让它创建一个人类可读的JSON字符串呢?即,您可以将其复制/粘贴到Web上的众多JSON验证器之一?

为了澄清,我的第一个问题是删除转义序列。

5 个答案:

答案 0 :(得分:7)

您可以使用替换者。 JSON.stringify.Replacer提供的第二个参数可以是函数或数组。

在你的情况下,我们可以创建一个用空格替换所有特殊字符的函数。下面的例子替换了空格和下划线。

function replacer(key, value) {
  return value.replace(/[^\w\s]/gi, '');
}

var foo = {"a":"1","b":2};
var jsonString = JSON.stringify(foo, replacer);

如果您只想替换一个特殊字符,请使用:

JSON.stringify({ a: 1, b: 2 }, null, '\t');

有关替换者的详细信息,请查看MDN页面 JSON.stringify()

答案 1 :(得分:3)

您可以在JSON.stringify上使用格式。

'\t'代表标签字符

JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
// returns the string:
// '{
//     "uno": 1,
//     "dos": 2
// }'

答案 2 :(得分:1)

JSON.stringify(value[, replacer[, space]])

空格:用于将空格插入输出JSON字符串的字符串或数字对象,以便于阅读。

Replacer:一个改变字符串化过程行为的函数,或一个String和Number对象数组,用作白名单,用于选择要包含在JSON中的值对象的属性串。如果此值为null或未提供,则对象的所有属性都包含在生成的JSON字符串中。

所以你可以做到



var x = {"name":"void", "type":"O'\"Rielly"};
document.write(JSON.stringify(x, null, ' '));




答案 3 :(得分:1)

ECMAScript 2021,第 12 版

你可以使用

JSON.stringify()replaceAll()

来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll


const foo = {
    A: 'This is my \\',
    B: 'This \\ is his \\'
};

let jsonString = JSON.stringify(foo, null, 2);

document.write(jsonString);

jsonString = jsonString.replaceAll('\\', '');

document.write('<pre>' + jsonString + '</pre>');

答案 4 :(得分:0)

我会使用JSON.stringify()

  

JSON.stringify()方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以选择替换值,或者如果指定了replacer数组,则可以选择仅包含指定的属性。

有四个空格和一个<pre>...</pre>的适当显示环境。

结果良好,可读,可复制以供其他用途。

&#13;
&#13;
var object = { name: 'void', type1: "O'\"This", type2: 'O\'That', a: [1, 2, 3] };
document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');
&#13;
&#13;
&#13;