英文:
How to remove all spaces, newlines, tabs from byte array?
问题
我正在写一个测试,想要将json.Marshal
的结果与一个静态的JSON字符串进行比较:
var json = []byte(`{
"foo": "bar"
}`)
由于json.Marshal
的结果中没有任何\n
、\t
和空格,我以为可以简单地使用以下代码来去除所有这些字符:
bytes.Trim(json, " \n\t")
然而,不幸的是,这并不起作用。我可以编写一个自定义的修剪函数并使用bytes.TrimFunc
,但这对我来说似乎太复杂了。
除了这种方法,还有什么其他方法可以用尽可能少的代码来实现对JSON字符串的“压缩”?
最好的祝福,
Bo
英文:
I am writing a test where I want to compare the result of json.Marshal
with a static json string:
var json = []byte(`{
"foo": "bar"
}`)
As the result of json.Marshal
does not have any \n
, \t
and spaces I thought I could easily do:
bytes.Trim(json, " \n\t")
to remove all of these characters.
However unfortunately this does not work. I could write a custom trim function and use bytes.TrimFunc
but this seems to complicated to me.
What else could I do to have a json string "compressed" with as less code as possible?
Best,
Bo
答案1
得分: 43
使用任何修剪或替换函数都无法处理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
英文:
Using any trimming or replace function will not work in case there are spaces inside JSON strings. You would break the data, for example if you have something like {"foo": "bar baz"}
.
Just use json.Compact.
This does exactly what you need, except that it outputs to a bytes.Buffer
.
var json_bytes = []byte(`{
"foo": "bar"
}`)
buffer := new(bytes.Buffer)
if err := json.Compact(buffer, json_bytes); err != nil {
fmt.Println(err)
}
See http://play.golang.org/p/0JMCyLk4Sg for a live example.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论