2014-09-04 44 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\" }")); 
相關問題