在 GO lang 上编组嵌套 json 对象

问题描述 投票:0回答:1

我有一个结构

type MyStruct struct {
  A string
  B int
  C string
  D int
}

我想将它转换成这样的json对象:

{
  "A": "Some string",
  "B": 1234,
  "otherStruct": {
    "C": "Other string",
    "D": 5678
  }
}

我需要使用什么 json 标签才能正确转换它?

我尝试添加一些像这样的json标签:

type MyStruct struct {
  A string  `json:"A"`
  B int     `json:"B"`
  C string  `json:"otherStruct.C"`
  D int     `json:"otherStruct.D"`
}

但结果是这样的:

{
  "A": "Some string",
  "B": 1234,
  "otherStruct.C": "Other string",
  "otherStruct.D": 5678
}
json go
1个回答
0
投票

如果您希望使用标准 Go JSON 包来输出此 JSON:

{
  "A": "Some string",
  "B": 1234,
  "otherStruct": {
    "C": "Other string",
    "D": 5678
  }
}

然后您需要重写 Go 结构以匹配 JSON 的结构。例如:

package main

import (
    "encoding/json"
    "fmt"
)

type (
    OtherStruct struct {
        C string
        D int
    }

    MyStruct struct {
        A           string
        B           int
        OtherStruct OtherStruct `json:"otherStruct"`
    }
)

func main() {
    myvar := MyStruct{
        A: "Some string",
        B: 1234,
        OtherStruct: OtherStruct{
            C: "Other string",
            D: 5678,
        },
    }

    jsontext, err := json.Marshal(myvar)
    if err != nil {
        panic(err)
    }

    fmt.Printf("%s\n", jsontext)
}

这将产生:

{
  "A": "Some string",
  "B": 1234,
  "otherStruct": {
    "C": "Other string",
    "D": 5678
  }
}

我不认为标准工具有任何方法可以使 JSON 的结构与变量的结构不同。

© www.soinside.com 2019 - 2024. All rights reserved.