JavaScript:如何从 JSON 字符串中删除除值中的空格之外的所有空格?

Posted

技术标签:

【中文标题】JavaScript:如何从 JSON 字符串中删除除值中的空格之外的所有空格?【英文标题】:JavaScript: how do I remove all the white spaces from a JSON string except the ones in the values? 【发布时间】: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 【参考方案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\" "));

【讨论】:

以上是关于JavaScript:如何从 JSON 字符串中删除除值中的空格之外的所有空格?的主要内容,如果未能解决你的问题,请参考以下文章

如何将json从java传递到javascript函数

iOS Swift 如何从 UIWebView 将 JSON 字符串和数组或字典传递给 Javascript?

如何使用 JavaScript 将 JSON 文件从 HTML 页面发送到 ESP

将大型 json 字符串从 Javascript 发布到 Django

如何从服务器端加密数据并将其传递到客户端(javascript)并解密和使用它

问题解决:MySQL 从复合主键中删几个键