【问题标题】:JavaScript: how do I remove all the white spaces from a JSON string except the ones in the values?JavaScript:如何从 JSON 字符串中删除除值中的空格之外的所有空格?
【发布时间】:2014-10-29 20:00:49
【问题描述】:

鉴于以下 json...

var body = "{ \"name\": \"test\", \"description\": \"test json\", \"website\": \"domain.com\" }"

...如何删除除值中的空格之外的所有空格?

我尝试了以下正则表达式...

var body = "{ \"name\": \"test\", \"description\": \"test json\", \"website\": \"domain.com\" }".replace(/\r?\n|\r/g, "").replace(/\s+/g, "")

...但它也会删除值中的空格(即description):

{"name":"test","description":"testjson","website":"domain.com"}

我需要获取

{"name":"test","description":"test json","website":"domain.com"}

发送。

【问题讨论】:

  • 我认为你错过了 JSON 的重点,因为那不是 JSON,而是一个 JavaScript 对象。你想要JSON.stringify(body)
  • JSON.stringify(body) 不带空格返回。在尝试从那里删除之前,您是否尝试查看是否有空格?
  • @zerkms 嗯,这是标准/保证的行为吗?
  • 在实际示例中,我得到一个带有空格的 JSON 字符串...让我在我的帖子中修复这个示例。
  • 新版问题:先parse,再stringify

标签: javascript regex json


【解决方案1】:
var body = ' { "name": "test", "description": "test json", "website": "domain.com" } ';
JSON.stringify(JSON.parse(body))

返回:

{"name":"test","description":"test json","website":"domain.com"}

这正是您想要的。是的,带有 1 个参数的 JSON.stringify 保证提供最短的 JSON,这意味着键和值之外没有过时的空格。这是默认设置,因为在几乎所有情况下,JSON 都旨在成为一种高效的递归数据序列化方法 - 默认情况下,不必要的空格在那里没有用处。

The full syntax is actually:

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

可选的第三个参数默认为false - 如果设置为另一个值,它会生成带有额外空格或前导字符串的“漂亮打印”:

空格参数可用于控制最终字符串中的间距。 如果它是一个数字,则字符串化中的连续级别将分别 缩进这么多空格字符(最多 10 个)。如果它是一个 字符串,连续级别将由该字符串缩进(或第一个 十个字符)。

最后一点,您甚至不应该想要为此使用正则表达式。正则表达式用于理解字符模式,而不是用于处理 XML、HTML 或 JSON 等结构化数据。在这些情况下,请分别使用 XML、DOM 或 JSON 解析器并在其中处理结果。

【讨论】:

  • 我刚刚更新了我的帖子...我得到一个包含空格的 json 字符串...所以调用 stringify 对我不起作用。
  • 更新了答案。显然,先使用JSON.parse使其成为有效对象,然后再使用stringify
【解决方案2】:

解析 JSON,然后再次对其进行字符串化。解析它将 JSON 转换为 Javascript 对象,然后将其字符串化将返回最短的 JSON 表示:

var body = JSON.stringify(JSON.parse("{ \"name\": \"test\", \"description\": \"test json\", \"website\": \"domain.com\" }"));

【讨论】:

    猜你喜欢
    • 2013-02-01
    • 2011-09-27
    • 2021-10-08
    • 1970-01-01
    • 2011-08-24
    • 2023-04-08
    • 2019-11-25
    • 2014-08-26
    相关资源
    最近更新 更多