GoLang - 编码/ json.Marshal或fmt.sprintf?

时间:2015-01-30 17:15:11

标签: json go

哪个会更快?

data := fmt.Sprintf("{\"TEST\":3, \"ID\":\"%s\"}", Id)

或者json编组这样的结构吗?

2 个答案:

答案 0 :(得分:2)

对于具有基本数据类型(string,bool,int)的JSON,fmt.Sprintf更快。基准测试表明,对于渲染非常小的JSON对象,它的速度是json.Marshal的两倍,随着更多数据的添加,性能的差异也在增加。

使用两种方法渲染JSON对象的基准测试结果(为清晰起见,每次10,000,000次)如下:

Benchmarks for rendering a small JSON object
Time taken to render JSON object using json.Marshal:     8.747821898s
Time taken to render JSON object using fmt.Sprintf:      4.452937712s

Benchmarks for rendering a larger JSON object
Time taken to render JSON object using json.Marshal:     32.100388801s
Time taken to render JSON object using fmt.Sprintf:      10.392861696s

请注意,如果您的JSON对象包含更复杂的数据类型(如列表和嵌套对象),则这些结果不会成立。

答案 1 :(得分:1)

在很大程度上取决于你尝试做什么,你应该对它进行基准测试并看到。

但是对于非常具体的示例,最快的方法是使用基本的字符串连接,如:

data := `{"TEST":3, "ID":"` + Id + `"}`