javascript - 如何格式化字符串以修复 Javascript 中的缩进?

标签 javascript jquery json parsing

我正在解析一个文件以制作一些文档。

我返回的字符串是:

"([ {
                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:

  1. 出于某种原因,它被 () 包围。
  2. 键没有用双引号引起来。

因此,理想情况下您需要做的就是先将字符串转换为有效的 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/

相关文章:

php - 如何将 php 数组构造为 json

json - 在 Wonderware 的 ArchestrA/Quickscript.NET 中反序列化 JSON

javascript - 如何从 ReactJS setState 中查找对象数组的长度?

javascript - Bootstrap 图像滑动时更改 div 背景颜色

jquery - 为什么在测试 ui.sender 时,jquery sortable 中的更新事件似乎运行了两次

php - 创建数组/json 对象,无法完全正常工作

android - Web 服务、JSON 和 Android。结果 WS 不能正常工作

javascript - Jquery 计数器在重置后显示为零

javascript - ngFor + ngModel : How can I unshift values to the array I am iterating?

javascript - 如何在 struts 2 中将一个表的内容传输到另一个表?