【问题标题】:Is it possible to make custom object keys in JSON? [duplicate]是否可以在 JSON 中制作自定义对象键? [复制]
【发布时间】:2020-02-24 05:44:17
【问题描述】:

我一直在研究 Go API,我需要编码一些 JSON 来提供服务。

我的结构是这样的:

{
  "20.0.12":{
     "someData":"yes",
     "someMoreData":"no",
     "littleMore":"ok"
  },
  "20.0.13":{
     "someData":"AH",
     "someMoreData":"blue",
     "littleMore":"red"
  }
}

所以子数据有具体的标题。 someData、someMoreData 和 littleMore。这些头衔永远不会改变。但是,父母确实 - 20.0.12 和 20.0.13

我们可以在 Go 中使用如下结构创建 JSON:

type TestData struct{
  SomeData     string `json:"someData"`
  SomeMoreData string `json:"someMoreData"`
  LittleMore   string `json:"littleMore"`
}

然后只需运行json.NewEncoder(someVar).Encode({some instance of TestData})

是否可以让这些键是动态的?例如,如果我不希望 someData 总是说 someData?例如,我正在使用的数据库将该键从 someData 更改为 someDataX。是否可以让我的 json 密钥反映这一点?下面的代码不会运行,但这是我想要实现的目标:

type TestData (arg string, arg2  string){
   arg  string  `json:"`+arg+`"`
}

【问题讨论】:

标签: json go


【解决方案1】:

您不能拥有问题末尾所描述的运行时动态类型,但为此您不需要它们;你只需要一个map。如果您想将它们与encoding/json 一起使用,您还需要export 您的结构字段。例如:

type TestData struct {
    SomeData     string `json:"someData"`
    SomeMoreData string `json:"someMoreData"`
    LittleMore   string `json:"littleMore"`
}

myData := map[string]TestData{
    "20.0.12": TestData{
        SomeData:     "yes",
        SomeMoreData: "no",
        LittleMore:   "ok",
    },
    "20.0.13": TestData{
        SomeData:     "AH",
        SomeMoreData: "blue",
        LittleMore:   "red",
    },
}

json.NewEncoder(someWriter).Encode(myData)

在此处查看工作示例:https://play.golang.org/p/62mgpdY_v7c

【讨论】:

    猜你喜欢
    • 2023-01-04
    • 2011-09-01
    • 2015-12-16
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多