JSONの生成は構造体無しでjavascript並に簡単にできる

created byTakuya Ueda. Licensed under the Creative Commons 3.0 Attributions license.

こんにちはnasustです。 Go言語 / golangのJSONの生成はjavascript並に簡単にできます。 他サイトのJSONの生成の紹介が構造体しか無かったので、mapで簡単に出来ることを解説します。

json.Marshalで与えられる型はmap[string]interface{}を標準でサポートしています。 ですので下記のコードのようにjavascript並に簡単にJSONを生成できます。

package main

import (
	"encoding/json"
	"fmt"
)

type M map[string]interface{}
type A []interface{}

func main() {
	values := M{
		"a": "a",
		"b": func() A {
			return A{1, 2, 3}
		}(),
		"c": A{"va", "vb", "vc"},
		"d": M{
			"dd": 1.1,
			"cc": 2.2,
			"ee": nil,
			"qq": true}}

	bytes, err := json.MarshalIndent(values, "", "    ")
	if err == nil {
		jsonstring := string(bytes)
		fmt.Println(jsonstring)
	} else {
		fmt.Println("Err: ", err)
	}

}
go

結果

{
    "a": "a",
    "b": [
        1,
        2,
        3
    ],
    "c": [
        "va",
        "vb",
        "vc"
    ],
    "d": {
        "cc": 2.2,
        "dd": 1.1,
        "ee": null,
        "qq": true
    }
}
bash

サクッと作りたい場合は良いかも。ちゃんと開発する場合は構造体にした方がメンテナンスしやすいので留意して下さい。

prevnext