鉴于以下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"}
的Tx。
答案 0 :(得分:11)
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都是一种高效的递归数据序列化方法 - 默认情况下不需要使用空格。
JSON.stringify(value[, replacer [, space]])
可选的第三个参数默认为false
- 如果设置为另一个值,则会生成带有额外空格或引入字符串的“漂亮打印”:
space参数可用于控制最终字符串中的间距。 如果是数字,则每个字符串化中的连续级别 被这许多空格字符缩进(最多10个)。如果是的话 字符串,连续的级别将由此字符串(或第一个字符串)缩进 十个字符)。
作为最后一点,你甚至不应该想要使用正则表达式。 Regexp用于理解字符模式,而不是用于处理XML,HTML或JSON等结构化数据。在这些情况下,分别使用XML,DOM或JSON解析器并在那里处理结果。
答案 1 :(得分:4)
解析JSON,然后再次对其进行字符串化。解析它会将JSON转换为Javascript对象,然后对其进行字符串化将返回最短的JSON表示:
var body = JSON.stringify(JSON.parse("{ \"name\": \"test\", \"description\": \"test json\", \"website\": \"domain.com\" }"));