我正在解析一个文件以制作一些文档。
我返回的字符串是:
"([ {
href: "sass.html",
text: "Sass"
}, {
href: "components.html",
text: "Components"
}, {
href: "javascript.html",
text: "Javascript"
} ])
"
我想美化它,以便我可以将其输出到预标记中。所以理想的输出应该是这样的:
"(
[
{
href: "sass.html",
text: "Sass"
},
{
href: "components.html",
text: "Components"
},
{
href: "javascript.html",
text: "Javascript"
}
]
)"
我目前认为我可以通过以下方式删除字符串中的所有空格:
string.replace(/\s/g,'')
然后进行一堆分割以将每行分开并添加缩进间距并重新连接,但这对我来说感觉很困惑。有更好的方法吗?
当然非常感谢任何建议。
这不同于:How can I beautify JSON programmatically?因为我正在处理无效 JSON 上的字符串。
最佳答案
困难在于你的格式很奇怪,它不是有效的 JSON,所以你不能直接使用 JSON.parse()
。
由于以下两个原因,它不是有效的 JSON:
- 出于某种原因,它被
(
和)
包围。 - 键没有用双引号引起来。
因此,理想情况下您需要做的就是先将字符串转换为有效的 JSON,然后尝试解析它。
如果您确信相信这些数据,一个捷径就是先去掉括号,然后使用备受诟病的eval()
,因为它将绕过键未加引号的事实。
下面是一行代码(假设字符串位于名为 s
的变量中):
JSON.stringify(eval(s.substring(s.indexOf('(') + 1, s.lastIndexOf(')'))), null, "\t")
或者将其拆分一下:
var pseudoJson = s.substring(s.indexOf('(') + 1, s.lastIndexOf(')'));
JSON.stringify(eval(pseudoJson), null, "\t");
关于javascript - 如何格式化字符串以修复 Javascript 中的缩进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29221895/