假设我有一个如下结构: -
//easyjson:json
type JSONData struct {
Data []string
}
我想将下面的json解组为JSONData
struct
{"Data" : ["One", "Two", "Three"]}
有人可以告诉我如何使用easyjson在Golang中解组json吗?我在README
答案 0 :(得分:6)
我不知道你为什么要尝试使用easyjson。 encoding / json可以很好地使用。但是,虽然这是你的答案。
注意:如果你使用encoding / json会更好。
//easyjson:json
type JSONData struct {
Data []string
}
定义此结构后运行easyjson <fileName-JSONData-is-defined>.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)
那些方法。 然后使用
(un-)编组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)
一个完整的例子是here.
答案 1 :(得分:1)
嗯,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 models.go
package easyJson
//easyjson:json
type Data struct {
Name string `json:"name"`
Age int `json:"age"`
}
现在运行命令创建一个easyjson文件( -all 指定引用给定文件中的所有结构)
easyjson -all model / models.go
现在将生成一个新文件 models_easyjson.go ,使用哪个编组/解组将被引用
go run 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))
}
显然,easyjson比普通的json快7微秒,你会看到它对更大结构的影响,你可以看到下面的源代码。
https://github.com/sharathbj/random/tree/master/golang/easyJson
CHEARS !!
答案 2 :(得分:0)
我使用README.md文件中的说明安装:
去github.com/mailru/easyjson /...
然后我在我的GOPATH中为这个例子创建了一个目录:
$ GOPATH / github.com / jpudney /堆栈溢出/ 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>
。去
我用示例替换<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]