JSONデータを使用する方法


ようこそだけで十分な行く!これについての記事のシリーズの最初のですGo programming language 私はいくつかの最も一般的に使用されるカバーするGo standard library packages 例えば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 単に使用decodeProfile 結果が格納されるstruct
それは、このブログのためのすべてです!滞在は、より多くのためにチューニングし、好きなことを忘れないでください😃😃