3 回答
TA贡献1921条经验 获得超9个赞
好吧,easyJson 比普通 json 快 4 倍(根据它的文档),在我们的组织中,我们已经广泛使用它,是的,它更快。这是一个开始的小例子。我当前的目录名称是easyJson
vim easyjson.go
package main
import "fmt"
import "time"
import ej "random/golang/easyJson/model"
func main() {
t1 := time.Now()
var d ej.Data
d.Name = "sharathbj"
d.Age = 23
data, _ := d.MarshalJSON()
fmt.Println(string(data))
fmt.Println("elapsedTime:", time.Now().Sub(t1))
}
创建一个名为 model 的目录,其中定义了您的结构和新的 go 文件 models.go
mkdir 模型
vim 模型.go
package easyJson
//easyjson:json
type Data struct {
Name string `json:"name"`
Age int `json:"age"`
}
现在运行命令来创建一个easyjson文件(-all指定引用给定文件中的所有结构)
easyjson -所有模型/models.go
现在将生成一个新文件models_easyjson.go使用它将被引用的编组/解组
去运行easyjson.go
将easyjson与普通编码/json进行比较,下面是代码
vim 普通json.go
package main
import (
"fmt"
"time"
"encoding/json"
model "random/golang/easyJson/model"
)
func main() {
t1 := time.Now()
var d model.Data
d.Name = "sharathbj"
d.Age = 23
data, _ := json.Marshal(d)
fmt.Println(string(data))
fmt.Println("elapsedTime:", time.Now().Sub(t1))
}
显然 easyjson 比普通 json 快 7 微秒,当你对更大的结构执行它时,你会看到它的影响,你可以看到下面的源代码。
https://github.com/sharathbj/random/tree/master/golang/easyJson
干杯!!
TA贡献1812条经验 获得超5个赞
我使用 README.md 文件中的说明进行安装:
去获取 github.com/mailru/easyjson/...
然后我在我的 GOPATH 中为这个例子创建了一个目录:
$GOPATH/github.com/jpudney/stack-overflow/40587860
tree .
.
├── main.go
└── mypackage
├── example.go
└── example_easyjson.go
在 mypackage/example.go 我有以下代码:
package mypackage
//easyjson:json
type JSONData struct {
Data []string
}
然后,在 mypackage 目录中,我从 README 中运行了以下命令:
easyjson -all <file>.go
我<file>用示例替换的地方。所以最终运行以下内容:
easyjson -all example.go
这会生成一个名为的文件example_easyjson.go,其中包含生成的代码。
然后我创建了一个main.go文件给我们生成的代码。其中的内容是:
package main
import (
"encoding/json"
"fmt"
"github.com/jpudney/stack-overflow/40587860/mypackage"
)
func main() {
var data mypackage.JSONData
jsonBlob := `{"Data" : ["One", "Two", "Three"]}`
err := json.Unmarshal([]byte(jsonBlob), &data)
if err != nil {
panic(err)
}
fmt.Println(data.Data)
}
我构建并运行了这个文件,它按预期输出了数据:
$ go build -o test
$ ./test
[One Two Three]
TA贡献1815条经验 获得超10个赞
我不知道您为什么要尝试使用easyjson。encoding/json 可以很好地使用。但是,尽管这是您的答案。
注意:如果你使用 encoding/json 会更好。
//easyjson:json
type JSONData struct {
Data []string
}
定义此结构后运行easyjson <fileName-JSONData-is-defined>.go。这将创建一个额外的 go 文件包含
func (v JSONData) MarshalJSON() ([]byte, error)
func (v JSONData) MarshalEasyJSON(w *jwriter.Writer)
func (v *JSONData) UnmarshalJSON(data []byte) errorfunc (v *JSONData)
func UnmarshalEasyJSON(l *jlexer.Lexer)
那些方法。然后(取消)编组使用
d := &JSONData{}
d.UnmarshalJSON([]byte(`{"Data" : ["One", "Two", "Three"]} `))
// Or you could also use
// json.Unmarshal(data, d) this will also call this d.UnmarshalJSON
fmt.Println(d)
- 3 回答
- 0 关注
- 252 浏览
添加回答
举报