以下のような構造のJsonを生成したかったのだけど、
自分にはあまりいい記事がなかったので書くことに。
Responseキーの中のリストは、可変します。
{
"header": {
"error_message": "",
"status": "222"
},
"Response": [
{
"code": "111",
"name": "1"
},
{
"code": "111",
"name": "2"
},
{
"code": "111",
"name": "3"
}
]
}
{
"header": {
"error_message": "",
"status": "222"
},
"Response": null
}
とりあえずコードです
※一部修正しました。
struct.go
package main
import (
"encoding/json"
"fmt"
"strconv"
)
type CommonHeader struct {
ErrorMessage string `json:"error_message"`
Status string `json:"status"`
}
type ResultList struct {
Header CommonHeader `json:"header"`
//Response ListB //親構造体で配列であることを示したほうが良い
Response []ListB
}
type ListB struct { //type ListB []struct { こういう書き方はあまりよくない
Code string `json:"code,omitempty"`
Name string `json:"name,omitempty"`
}
// 構造体に以下のようなデータを付けてJsonにしたい
// [{code:"111",name":"hoge"},{code:"222",name":"fuge"}]
func main() {
//var aaa ListB 構造体変更したため、宣言方法も変更
var aaa []ListB
// 不定長のデータ構造をつける。
for i := 1; i < 4; i++ {
//fmt.Println(i)
aaa = append(aaa, struct {
Code string "json:\"code,omitempty\""
Name string "json:\"name,omitempty\""
}{Code: "111", Name: strconv.Itoa(i)})
}
//fmt.Println(aaa)
//j, _ := json.Marshal(aaa)
//fmt.Println(string(j))
////// struct生成(head)
head := CommonHeader{
ErrorMessage: "",
Status: "222",
}
// headとaaaを構造体にセット
result := ResultList{
Header: head,
Response: aaa,
}
//fmt.Println(result)
//json化する
result_j, _ := json.Marshal(result)
fmt.Println(string(result_j))
}
Forループ内でaaaに連想配列をループ回数分(好きな)だけAppendします。
Print部分は確認用としてあえて残してあります。
変数名なんかも、どこがどこにつながるかわかるように分けてます。
(キー名と変数名が同じものとか、自分には見にくいので・・・。)
うまく書くと、いい感じに変数名とか省略されるので、一足飛びでGoを学ぼうとすると躓くことが多いです…。