2014-09-04 1416 views
2

考虑下面的JSON ...JavaScript:如何从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。

+2

我想你错过了JSON的点,因为这不是JSON,这是一个JavaScript对象。你想'JSON.stringify(body)' – elclanrs 2014-09-04 22:51:57

+0

'JSON.stringify(body)'不带空格返回它。在尝试从那里移除它之前是否尝试查看是否有空格? – zerkms 2014-09-04 22:55:42

+0

@zerkms嗯,这是标准/保证行为? – user2864740 2014-09-04 22:56:08

回答

8
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解析器并在其中处理结果。

+0

我刚刚更新了我的帖子......我得到一个包含空格的json字符串......所以调用stringify不适用于我。 – j3d 2014-09-04 23:02:17

+0

更新了答案。显然,首先使用'JSON.parse'来使它成为一个有效的对象,然后重新'串'它。 – 2014-09-04 23:03:42

2

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

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