我有两个在Go中解组的json文件。
第一个对象包含由第二个集合中的ID引用的某种类型的对象。
// Foo
{
"id": 5,
"key": "value"
}
和
// Bar
{
"name": "bar",
"fooReferenceId": 5
}
我想以struct
结尾
type Bar struct {
Name string
Foo *Foo
}
有没有一种类似于我们提供json:"..."
密钥解析器的方法来实现此目的?
类似
type Bar struct {
Name string `json:"name"`
Foo *Foo resolveFooById(`json:"fooReferenceId"`)
}
答案 0 :(得分:2)
您需要使用自定义拆组器,如本文底部的示例:
http://choly.ca/post/go-json-marshalling/
对于您的示例,它看起来像:
func (b *Bar) UnmarshalJSON(input []byte) error {
type Alias Bar
aux := &struct {
FooReferenceID int `json:"fooReferenceId"`
*Alias
}{
Alias: (*Alias)(b),
}
if err := json.Unmarshal(input, &aux); err != nil {
return err
}
for index, foo := range foos {
if foo.ID == aux.FooReferenceID {
b.Foo = &foos[index]
break
}
}
return nil
}
此处是完整的可执行示例: