gpt4 book ai didi

go - 将具有嵌入式接口(interface)的结构转换为 JSON

转载 作者:IT王子 更新时间:2023-10-29 01:52:13 24 4
gpt4 key购买 nike

我有一个要编码为 JSON 的结构。它有一个名为 Foo 的已定义字段(导出为 foo)和一个 data 接口(interface)字段,我想向其传递一个带有附加 JSON 的动态结构字段。

然而,当数据字段是一个接口(interface)而不是特定结构时,它永远不会导出为 JSON。我怎样才能使它工作?

package main

import (
"encoding/json"
"fmt"
)

type data interface{}

type foo struct {
Foo string `json:"foo,omitempty"`
data
}

type bar struct {
Bar string `json:"bar,omitempty"`
}

func main() {
b := bar{"bar"}
f := foo{"foo", b}

byt, err := json.Marshal(f)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(byt))
}

我需要输出看起来像这样(它需要是扁平的,而不是嵌套的):

{"foo": "foo", "bar": "bar"}

最佳答案

您可以使用自定义 json.Marshaler 来做到这一点实现和一些字节 slice 。

func (f foo) MarshalJSON() ([]byte, error) {
type goo foo
g := goo(f)

b1, err := json.Marshal(g)
if err != nil {
return nil, err
}

b2, err := json.Marshal(g.data)
if err != nil {
return nil, err
}

s1 := string(b1[:len(b1)-1])
s2 := string(b2[1:])

return []byte(s1 + ", " + s2), nil
}

https://play.golang.org/p/NYTNWIL-xu

请注意,这不是检查字节是否真的可以 slice ,它也没有考虑 data 字段是 slice 还是数组的可能情况,我不确定如何无论如何,你会希望它变平。

关于go - 将具有嵌入式接口(interface)的结构转换为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47335352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com