我有一个像这样的结构:
type my_struct struct {
First string `json:"first"`
Second string `json:"second"`
Number int `json:"number"`
}
当我将其编组为JSON时,它会输出非常简单的JSON,因为您需要:
var output_json []byte
output_json, _ = json.Marshal(output)
fmt.Println(string(output_json))
结果:
{"first":"my_string","second":"another_string","number":2}
到目前为止一切都很好!
在将该结构编组为JSON之前,我想做的是将其嵌套在另一个结构中。结果输出将是JSON,如下所示:
{
"fields": {
"first": "my_string",
"number": 2,
"second": "another_string"
},
"meta": "data"
}
我该怎么做?
答案 0 :(得分:0)
我认为您可以静态声明要使用的另一个结构:
type WrappedOutput struct {
fields my_struct
meta string
}
然后你可以在编组之前嵌入你的结构
o := WrappedOutput{fields: output}
全新去,所以不确定这是否是最简单的方法
答案 1 :(得分:0)
执行此操作的干净方法是声明2个结构(我已在下面全局完成)并将My_struct
嵌套在更高级别的结构中。
然后,您可以在编组它之前初始化更高级别的结构:
package main
import (
"encoding/json"
"fmt"
)
type My_struct struct {
First string `json:"first"`
Second string `json:"second"`
Number int `json:"number"`
}
type Big_struct struct {
Fields My_struct
Meta string
}
func main() {
output := Big_struct{
Fields: My_struct{
First: "my_string",
Second: "another_string",
Number: 2,
},
Meta: "data",
}
output_json, err := json.Marshal(output)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(output_json))
}
如果您不想要Big_struct
,您可以根据需要在代码中声明匿名结构并将My_struct
嵌套在其中:
package main
import (
"encoding/json"
"fmt"
)
type My_struct struct {
First string `json:"first"`
Second string `json: "second"`
Number int `json:"number"`
}
func main() {
output := struct {
Fields My_struct
Meta string
}{
Fields: My_struct{
First: "my_string",
Second: "another_string",
Number: 2,
},
Meta: "data",
}
output_json, err := json.Marshal(output)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(output_json))
}
答案 2 :(得分:0)
如果您不想使用新结构,可以执行以下操作:
data := my_struct{First: "first", Second: "2", Number: 123}
result, _ := json.Marshal(&map[string]interface{}{"fields":data,"meta":"data"})
fmt.Println(string(result))
它不干净,但它可以完成工作。