如何将集合中的嵌套字段映射到非嵌套格式的Go结构体中?

huangapple go评论88阅读模式
英文:

How to map the nested field in a collection to go struct that is not nested in format?

问题

在Golang中,可以使用bson标签将age的值绑定到结构体格式中。以下是如何在Golang中将age的值绑定到结构体格式的示例代码:

type Person struct {
    Name string `bson:"name"`
    Age  int    `bson:"age"`
}

func main() {
    bsonData := bson.M{
        "name": "root",
        "sports": "Cricket",
        "Personal": bson.M{
            "age": 32,
        },
    }

    var person Person
    err := bson.Unmarshal(bsonData, &person)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println("Name:", person.Name)
    fmt.Println("Age:", person.Age)
}

在上面的示例中,我们使用bson.Unmarshal函数将bsonData中的值绑定到Person结构体中的字段。通过指定bson标签,我们告诉Golang如何将age的值绑定到Age字段。最后,我们可以通过访问person.Age来获取绑定后的值。

英文:

Format of bson:

{
  name: "root", 
  sports:" Cricket", 
  Personal: {
     age:32
  }
}

Go struct format:

type Person struct {
    Name string `bson:"name"`
    Age  int `bson:"age"`
}

How to bind the value of age into this struct format in golang?

答案1

得分: 0

你需要一个中间类型,它将帮助你将数据库的DTO(数据转换对象)转换为模型对象。建议将这两者分开。

package main

import (
	"encoding/json"
	"fmt"
)

type PersonInfoDto struct {
	Age int `json:"age"`
}

type PersonDto struct {
	Name     string        `json:"name"`
	Sports   string        `json:"sports"`
	Personal PersonInfoDto `json:"Personal"`
}

type Person struct {
	Name string
	Age  int
}

func main() {
	jsonInput := `{"name": "root", "sports": "Cricket", "Personal": {"age": 32}}`
	var dto PersonDto
	err := json.Unmarshal([]byte(jsonInput), &dto)
	if err != nil {
		fmt.Println(err)
	}

    // 你的模型对象
	p := Person{dto.Name, dto.Personal.Age}
	fmt.Println(p)
}

英文:

You need an intermediate type that will help you transform your database DTO (Data Transform Object) into model object. It is recommended to separate those two.

package main

import (
	"encoding/json"
	"fmt"
)

type PersonInfoDto struct {
	Age int `json:"age"`
}

type PersonDto struct {
	Name     string        `json:"name"`
	Sports   string        `json:"sports"`
	Personal PersonInfoDto `json:"Personal"`
}

type Person struct {
	Name string
	Age  int
}

func main() {
	jsonInput := "{ \"name\": \"root\", \"sports\": \"Cricket\", \"Personal\": { \"age\": 32 }}"
	var dto PersonDto
	err := json.Unmarshal([]byte(jsonInput), &dto)
	if err != nil {
		fmt.Println(err)
	}

    // your model object
	p := Person{dto.Name, dto.Personal.Age}
	fmt.Println(p)
}

huangapple
  • 本文由 发表于 2021年9月13日 21:35:18
  • 转载请务必保留本文链接:https://go.coder-hub.com/69163658.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定