2014-07-16 77 views
7

我寫一個測試,我想的json.Marshal結果與靜態JSON字符串比較:如何從字節數組中刪除所有空格,換行符,製表符?

var json = []byte(`{ 
    "foo": "bar" 
}`) 

由於json.Marshal結果沒有任何\n\t和空間我以爲我可以很容易做到:

bytes.Trim(json, " \n\t") 

刪除所有這些字符。 但不幸的是,這不起作用。我可以編寫自定義修剪功能並使用bytes.TrimFunc,但這對我來說似乎很複雜。

我還能做些什麼來使json字符串「壓縮」儘可能少的代碼?

最佳, 博

+2

您需要一個替換功能,而不是修剪功能。但是如果你在鍵和值中有空格呢?你怎麼知道你是否在關鍵/價值內?你不能沒有寫一個JSON解析器:)所以你被困在一個循環裏,除非你100%確定json中的所有空格都是填充而不是鍵/值。否則,只需使用'strings.Replace' :) –

+1

因爲它是一個字節數組而不是字符串,所以可以使用'bytes.Replace'來代替。 –

回答

12

使用任何修整或替換功能將不會在個案工作有JSON字符串裏的空格。你會破壞數據,例如,如果你有類似{"foo": "bar baz"}的東西。

只需使用json.Compact

這正是你所需要的,只是它輸出到bytes.Buffer

var json_bytes = []byte(`{ 
    "foo": "bar" 
}`) 
buffer := new(bytes.Buffer) 
if err := json.Compact(buffer, json_bytes); err != nil { 
    fmt.Println(err) 
} 

查看http://play.golang.org/p/0JMCyLk4Sg作爲一個生動的例子。

+0

感謝您的簡單解決方案。確切的我正在尋找的東西。 – bodokaiser

+0

不錯,從來沒有意識到json.Compact甚至存在。 –

相關問題