将EasyJSON与golang一起使用

tuk*_*tuk 2 json go

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

//easyjson:json
type JSONData struct {
    Data []string
}
Run Code Online (Sandbox Code Playgroud)

我想要将下面的json解组为JSONDatastruct

{"Data" : ["One", "Two", "Three"]} 
Run Code Online (Sandbox Code Playgroud)

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

sad*_*lil 6

我不知道你为什么要尝试使用easyjson.encoding/json可以很好地使用.但是,虽然这是你的答案.

注意:如果你使用encoding/json会更好.

//easyjson:json
type JSONData struct {
    Data []string
}
Run Code Online (Sandbox Code Playgroud)

定义此结构运行后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)
Run Code Online (Sandbox Code Playgroud)

那些方法.然后(un-)marshal使用

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)
Run Code Online (Sandbox Code Playgroud)

这里有一个完整的例子.

  • 我的 json blob 非常大。`encoding/json` 似乎很慢。因此尝试使用 `easyjson`,因为他们声称它比 `encoding/json` 快 3-5 倍。 (4认同)

Sha*_* BJ 6

好吧,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))
}
Run Code Online (Sandbox Code Playgroud)

创建一个名为 model 的目录,在其中定义您的结构和新的 go 文件 models.go

目录模型

vim 模型.go

package easyJson

//easyjson:json
type Data struct {
  Name string `json:"name"`
  Age  int    `json:"age"`
}
Run Code Online (Sandbox Code Playgroud)

现在运行命令来创建一个easyjson文件(-all指定引用给定文件中的所有结构)

easyjson -所有模型/models.go

现在将使用将引用编组/解组的新文件models_easyjson.go生成

去运行easyjson.go

在此处输入图片说明

将easyjson与普通编码/json进行比较,下面是代码

vim normaljson.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))
 }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

很明显,easyjson 比普通 json 快 7 微秒,当你对更大的结构这样做时你会看到它的影响,你可以看到下面的源代码。
https://github.com/sharathbj/random/tree/master/golang/easyJson

干杯!!