パース : 解析
ioutil.ReadFile("ファイル名") ([]byte, err)
// ファイルを閉じる作業はしなくていいらしい
or
os.Open("./sample.json") (File, err)
// File型での読み込み
func Marshal(v interface{}) ([]byte, error) //vは変換元のデータ。返り値は[]byteとしてJSONデータ, //errとして成功した場合nilが返却される。
func Unmarshal(data []byte, v interface{}) error //dataはJSONのデータ, vは変換したい型の変数 //返り値はerrとして成功した場合nilが返却される。 //ポインタとして渡した変数vに変換後の値が入る。
以下みたい形式のjsonが作れなくて苦戦してる。一応以下の形式のJSONファイルを読み込んだ時mapで返ってくるから、mapでjsonを管理するものは作ってみた。application/jsonでそのmap形式のJSONは返却できたけどこれでいいのだろうか…
{
"key" : {
"data": {
"num" : "1",
"num" : "2"
},
"data3": {
"num" : "1",
"num" : "2"
}
},
"key2" : {
"data": {
"num" : "1",
"num" : "2"
},
"data3": {
"num" : "1",
"num" : "2"
}
}, //keyが任意で追加されていく
}
インタフェースを構造体に設定する
参考文献 : 構造体にフィールドを追加しないで、JSONに動的にフィールドを追加したい #golang
reflectを使う
参考文献 : golangでStructを動的に作る方法。 - Qiita
普通にできました。simple-jsonパッケージの使用で勝手にキーから構造体(正確にはmap[string]interface{})的なものを作れます。正確にはキーと値の追加という形で作れます。
参考 : https://qiita.com/TalesofFox/items/5c147a19a9ae5c41f41a
https://pkg.go.dev/github.com/bitly/go-simplejson?tab=doc
type ID struct {
WorkIDs []WorkID `json:"WorkID"`
}
var data map[string]interface{}
bytes, err := ioutil.ReadFile(filePath)
json.Unmarshal(bytes, &data)
works := make([]WorkID, num)
err = mapstructure.Decode(data["Id"], works)
if err != nil {
fmt.Println(54)
return IDs, err
}
[]byteからJSONに直した後、構造体や配列に入れずにget()等を使って直接値をとってこれるようになるパッケージ
simplejson.NewJson("ファイル名") // []byte型からsimplejson.Json型への変換 (たぶんsimplejson専用の型)
jsonの読み込みに特化したパッケージ
参考 :
https://qiita.com/hironobu_s/items/602becd6b7f5995503d6
https://github.com/antonholmquist/jason