使用 EasyJSON 和 golang

假设我有一个如下结构: -


//easyjson:json

type JSONData struct {

    Data []string

}

我想将下面的 json 解组为JSONDatastruct


{"Data" : ["One", "Two", "Three"]} 

有人可以告诉我如何使用easyjson在Golang中解组json吗?我在他们的文章中找不到任何例子README


小唯快跑啊
浏览 253回答 3
3回答

郎朗坤

好吧,easyJson 比普通 json 快 4 倍(根据它的文档),在我们的组织中,我们已经广泛使用它,是的,它更快。这是一个开始的小例子。我当前的目录名称是easyJsonvim easyjson.gopackage mainimport "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.gomkdir 模型vim 模型.gopackage easyJson//easyjson:jsontype Data struct {  Name string `json:"name"`  Age  int    `json:"age"`}现在运行命令来创建一个easyjson文件(-all指定引用给定文件中的所有结构)easyjson -所有模型/models.go现在将生成一个新文件models_easyjson.go使用它将被引用的编组/解组去运行easyjson.go将easyjson与普通编码/json进行比较,下面是代码vim 普通json.gopackage mainimport (   "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干杯!!

ABOUTYOU

我使用 README.md 文件中的说明进行安装:去获取 github.com/mailru/easyjson/...然后我在我的 GOPATH 中为这个例子创建了一个目录:$GOPATH/github.com/jpudney/stack-overflow/40587860tree&nbsp; .&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;.├── main.go└── mypackage&nbsp; &nbsp; ├── example.go&nbsp; &nbsp; └── example_easyjson.go在 mypackage/example.go 我有以下代码:package mypackage//easyjson:jsontype JSONData struct {&nbsp; &nbsp; Data []string}然后,在 mypackage 目录中,我从 README 中运行了以下命令:easyjson -all <file>.go我<file>用示例替换的地方。所以最终运行以下内容:easyjson -all example.go这会生成一个名为的文件example_easyjson.go,其中包含生成的代码。然后我创建了一个main.go文件给我们生成的代码。其中的内容是:package mainimport (&nbsp; &nbsp; "encoding/json"&nbsp; &nbsp; "fmt"&nbsp; &nbsp; "github.com/jpudney/stack-overflow/40587860/mypackage")func main() {&nbsp; &nbsp; var data mypackage.JSONData&nbsp; &nbsp; jsonBlob := `{"Data" : ["One", "Two", "Three"]}`&nbsp; &nbsp; err := json.Unmarshal([]byte(jsonBlob), &data)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; panic(err)&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println(data.Data)}我构建并运行了这个文件,它按预期输出了数据:$ go build -o test$ ./test[One Two Three]

动漫人物

我不知道您为什么要尝试使用easyjson。encoding/json 可以很好地使用。但是,尽管这是您的答案。注意:如果你使用 encoding/json 会更好。//easyjson:jsontype JSONData struct {&nbsp; &nbsp; 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)&nbsp;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.UnmarshalJSONfmt.Println(d)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go