2012-01-18 58 views
25

我有一個縮進的JSON字符串,例如在.NET中縮小縮進的JSON字符串

{ 
    "a": 1 
} 

不過,我沒有實例的類型被序列化或反序列化。

在我的情況,有什麼最有效的方式縮小 JSON字符串?例如

{"a":1} 

我不介意使用庫,如果他們是生產就緒。

回答

55
Regex.Replace(myJSON, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1") 

應該這樣做。它確保保留包含空格字符的字符串,並放棄所有其他空格字符。所有JSON關鍵字(false,true,null)必須用逗號或其他標點符號分隔,以便只保留字符串內部的空格。


第一個選項(\"(?:[^\"\\\\]|\\\\.)*\")一個雙引號的字符串匹配。 (...)表示輸出被捕獲並在替換中可用,如$1[^\"\\\\]匹配除雙引號或轉義字符\以外的任何字符。

由於匹配是從左到右發生的,因此第二個選項\s+將不匹配字符串中的空格。

所以我們匹配整個字符串和字符串之外的空格。在前一種情況下,$1是字符串標記,在後一種情況下,$1是空字符串,因爲未使用組1。


這按預期工作,因爲

  1. 在JSON唯一令牌可以包含空格的雙引號字符串。 JSON中沒有單引號字符串或註釋。
  2. JSON語法在所有多字符標記之間需要單字符標點符號,因此刪除空格不會合並標記。在JavaScript中,這可能是有問題的,因爲需要空間來打破令牌; var x=0varx=0不同,x - -(y)x--(y)不同。