JSONデータを使用する方法
ようこそだけで十分な行く!これについての記事のシリーズの最初のですGo programming language 私はいくつかの最も一般的に使用されるカバーするGo standard library packages 例えば
私は、あなたが私にカバーしたいと思う特定の試み話題についての提案をするために幸せ以上です!お気軽にまたはちょうどコメントをドロップ😃
この記事では
共通のオプションは
中
HTTPレスポンスでどう動作するかの例を以下に示します.
JSONをバイト配列で指定します.
それは、このブログのためのすべてです!滞在は、より多くのためにチューニングし、好きなことを忘れないでください😃😃
encoding/json
, io
, net/http
, sync
私はこれらの比較的短いと例駆動を維持する予定です.the code is available in this GitHub repo
私は、あなたが私にカバーしたいと思う特定の試み話題についての提案をするために幸せ以上です!お気軽にまたはちょうどコメントをドロップ😃
この記事では
encoding/json
JSONとGO型の間の変換を処理するパッケージRFC 7159 ). 右にジャンプしましょう!GOタイプをJSONに変換する
マーシャル
共通のオプションは
Marshal
関数が署名 func Marshal(v interface{}) ([]byte, error)
以下に例を示します.func main() {
profile := Profile{Email: "[email protected]", Username: "abhirockzz", Blogs: []Blog{
Blog{BlogName: "devto", URL: "https://dev.to/abhirockzz/"},
Blog{BlogName: "medium", URL: "https://medium.com/@abhishek1987/"},
}}
jsonData, err := json.Marshal(&myprofile)
//jsonData, err := json.MarshalIndent(&profile, "", " ")
if err != nil {
panic(err)
}
fmt.Println(string(jsonData))
}
you can use
MarshalIndent
(commented) to indent the JSON output
エンコーダ
中
Marshal
バイト配列を扱う[]byte
), 安Encoder
は一般的であり、io.Writer
JSONデータのシンクとして定義することができますio.Writer
インターフェースのようなインターフェースos.Stdout
), またはHTTPレスポンスhttp.ResponseWriter
), などfunc main() {
profile := Profile{Email: "[email protected]", Username: "abhirockzz", Blogs: []Blog{
Blog{BlogName: "devto", URL: "https://dev.to/abhirockzz/"},
Blog{BlogName: "medium", URL: "https://medium.com/@abhishek1987/"},
}}
encoder := json.NewEncoder(os.Stdout)
err := encoder.Encode(&profile)
if err != nil {
panic(err)
}
}
用途NewEncoder
を指定するio.Writer
. あなたが電話するときEncode
, 変換が行われ、JSONは作家ですio.Writer
を指定します.HTTPレスポンスでどう動作するかの例を以下に示します.
func main() {
profile := Profile{Email: "[email protected]", Username: "abhirockzz", Blogs: []Blog{
Blog{BlogName: "devto", URL: "https://dev.to/abhirockzz/"},
Blog{BlogName: "medium", URL: "https://medium.com/@abhishek1987/"},
}}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
encoder := json.NewEncoder(w)
err := encoder.Encode(&profile)
if err != nil {
panic(err)
}
})
http.ListenAndServe(":8080", nil)
}
JSONデータのGo型への変換
非マーシャル
JSONをバイト配列で指定します.
Unmarshal
指定したGoデータ型のポインタにJSON構文解析結果を格納するstruct
)func Unmarshal(data []byte, v interface{}) error
以下に簡単な例を示します:func main() {
jsonData := `{"email":"[email protected]","username":"abhirockzz","blogs":[{"name":"devto","url":"https://dev.to/abhirockzz/"},{"name":"medium","url":"https://medium.com/@abhishek1987/"}]}`
var profile Profile
err := json.Unmarshal([]byte(jsonData), &profile)
if err != nil {
panic(err)
}
...
}
デコーダ
Decoder
JSON入力のソースを指定することで、JSONデータをマーシャリングする一般的な方法を提供しますio.Reader
バイト配列に対して.func main() {
jsonData := `{"email":"[email protected]","username":"abhirockzz","blogs":[{"name":"devto","url":"https://dev.to/abhirockzz/"},{"name":"medium","url":"https://medium.com/@abhishek1987/"}]}`
jsonDataReader := strings.NewReader(jsonData)
decoder := json.NewDecoder(jsonDataReader)
var profile Profile
err := decoder.Decode(&profile)
if err != nil {
panic(err)
}
...
}
私たちはio.Reader
JSONからstring
ショートカットを使用したデータstrings.NewReader
. 次に、デコーダを使用してNewDecoder
単に使用decode
をProfile
結果が格納されるstructそれは、このブログのためのすべてです!滞在は、より多くのためにチューニングし、好きなことを忘れないでください😃😃
Reference
この問題について(JSONデータを使用する方法), 我々は、より多くの情報をここで見つけました https://dev.to/itnext/how-to-work-with-json-data-in-go-2m9gテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol