golangで無名structの入れ子

More than 3 years have passed since last update.


golangで無名structの入れ子

試したやつ。

go version go1.4 linux/amd64

タグ付けもできる。

marshal / unmarshal に使えそう。

けど、初期化する方法がわからない。

ってうか、外から定義して初期化ってできなそう。

特に無名structの配列だと詰みそう。

外で同じ型定義してキャストしてやればたぶんいけるけど。


main.go

package main

import (
"bytes"
"encoding/json"
"encoding/xml"
"fmt"
)

type Hoge struct {
Datas []struct {
SomeZ int `json:"z" xml:"z"`
AwesomeA struct {
IntVal int `json:"x" xml:"x"`
StrVal string `json:"y" xml:"y,attr"`
} `json:"a" xml:"a"`
} `json:"datas" xml:"datas"`
}

var jsnstr = `
{
"datas": [
{
"z": 123,
"a": {
"x": 456,
"y": "bar"
}
},
{
"z": 234,
"a": {
"x": 567,
"y": "foo"
}
}
]
}
`

var xmlstr = `
<Hoge>
<datas>
<z>123</z>
<a y="bar">
<x>456</x>
</a>
</datas>
<datas>
<z>234</z>
<a y="foo">
<x>567</x>
</a>
</datas>
</Hoge>
`

func main() {
var d1, d2 Hoge

dec := json.NewDecoder(bytes.NewBufferString(jsnstr))
err := dec.Decode(&d1)
fmt.Println(jsnstr)
fmt.Printf("%+v %+v \n", d1, err)

p := xml.NewDecoder(bytes.NewBufferString(xmlstr))
err = p.Decode(&d2)
fmt.Println(xmlstr)
fmt.Printf("%+v %+v \n", d2, err)
}