golang
答えて
easyjsonを使っている理由がわかりません。エンコーディング/ jsonはうまく動作します。しかしここにあなたの答えがあります。
NB:encoding/jsonを使用するとよいでしょう。この構造体の実行easyjson <fileName-JSONData-is-defined>.go
を定義した後
//easyjson:json
type JSONData struct {
Data []string
}
。
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)
これらのメソッドを追加します。 次に、(未)マーシャルは完全な例は、私がREADME.mdファイルからの命令を使用してインストールhere.
私のjsonブロブはかなり大きいです。 'encoding/json'はかなり遅いようです。そこで 'easyjson'を' encoding/json'よりも3倍から5倍高速にしようと試みています。 – tuk
ある
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)
を使用して:
github.com/mailru/を取りに行きますeasyjson/...
この例では、私のGOPATHにディレクトリを作成しました:
$ GOPATH/github.com/jpudney /スタックオーバーフロー/ mypackageとで40587860
tree .
.
├── main.go
└── mypackage
├── example.go
└── example_easyjson.go
/example.go I次のコードを持っている:
package mypackage
//easyjson:json
type JSONData struct {
Data []string
}
その後、内をmypackageディレクトリREADMEから以下のコマンドを実行しました:
easyjson -al l
<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]
まあ、easyJsonは4倍速い通常のJSONより(そのdocumetsあたりなど)私たちの組織では、これを広範囲に使用しています。ここには小さな例があります。私の現在のディレクトリ名は、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))
}
あなたの構造が定義されているモデル、および新しいゴーファイル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モデル/ models.go
今すぐ新しいファイルが生成されますmodels_easyjson.goマーシャリング/アンマーシャリングの参照先を指定します
は、以下のコードであり、easyjson.goは
通常のエンコーディング/ JSONでeasyjson比較するために実行して行く
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マイクロ秒である、とあなたは大きな構造のためにそれを行うとき、uは下記のソースコードを見ることができ、その影響を確認します。
https://github.com/sharathbj/random/tree/master/golang/easyJson
Chears !!
- 1. Golang exec.Command()エラー - golang
- 2. golangでgolang
- 3. golang -
- 4. golang
- 5. golang
- 6. Golang
- 7. golang
- 8. golang
- 9. Golang
- 10. Golang、
- 11. Golang
- 12. Golang
- 13. golang
- 14. golang
- 15. Golang - struct:time.Time
- 16. がgolang
- 17. Golang:インストールディレクトリエラー?
- 18. はGoLang
- 19. golangは
- 20. golangテンプレート
- 21. Golang:キー
- 22. Golangインポートパッケージエラー
- 23. Golang:データ
- 24. はGolang
- 25. golangモバイルアクセスファイルシステム
- 26. サービングサブディレクトリ[GoLang]
- 27. golangタイプキャストルール
- 28. はGolang
- 29. GOLANG xmlデコード
- 30. Golang http:multiple response.WriteHeaderは
easy jsonを使用してアンマーシャリングする必要があるのはなぜですか? – sadlil