当前位置: 首页 > 面试题库 >

我如何将动态Viper或JSON键解组为Go中的struct字段的一部分

越开畅
2023-03-14
问题内容

当JSON不是“期望”格式时,我发现GOLANG中的编组和拆组非常混乱。例如,在JSON配置文件(我正尝试与Viper一起使用)中,我有一个配置文件,看起来像:

{
  "things" :{
    "123abc" :{
      "key1": "anything",
      "key2" : "more"
    },
    "456xyz" :{
      "key1": "anything2",
      "key2" : "more2"
    },
    "blah" :{
      "key1": "anything3",
      "key2" : "more3"
    }
  }
}

其中“事物”可能是另一个对象中的一个对象n向下移动,我有一个struct:

type Thing struct {
  Name string  `?????`
  Key1 string  `json:"key2"`
  Key2 string  `json:"key2"`
}

我该如何解组JSON,更具体地说是解编viper配置(使用viper.Get(“ things”))来获得Things类似数组:

t:= Things{
   Name: "123abc",
   Key1: "anything",
   Key2: "more",
}

我尤其不确定如何将密钥作为结构字段


问题答案:

将地图用于动态键:

type X struct {
    Things map[string]Thing
}

type Thing struct {
    Key1 string
    Key2 string
}

像这样解组:

var x X
if err := json.Unmarshal(data, &x); err != nil {
    // handle error
}

操场上的例子

如果名称必须是该结构的成员,请编写一个循环以在解组后将其添加:

type Thing struct {
    Name string `json:"-"` // <-- add the field
    Key1 string
    Key2 string
}

...

// Fix the name field after unmarshal
for k, t := range x.Things {
    t.Name = k
    x.Things[k] = t
}

操场上的例子



 类似资料:
  • 是否可以用未知字段散集JSON?该字段名总是不同的,但结构是相同的。JSON是POST请求的结果。 我的代码:

  • 问题内容: package main 我想读入 我已经问了几个相关问题。 我已经阅读了一些文章和帖子,但仍然找不到解决方法。 问题答案: 我认为您正在以错误的方式进行操作。如果要使用C库,则可以使用C库读取文件。 不要纯粹使用cgo来拥有结构定义,您应该在Go中自己创建它们。然后,您可以编写适当的编组/解组代码以从原始字节读取。 快速的Google显示,有人已经完成了将相关C库的外观转换为Go所需

  • 问题内容: 因此,我在解析golang中的数据时遇到了一些麻烦: } 使用此结构时,我可以很容易地输出它。 但是,一旦我将“ Gateways [] struct”分离成自己的结构,它就会返回一个空数组… 完整来源。 问题答案: 您的函数存在问题,您正在调用作为第一个参数传递,这是一个包名:这是模棱两可的。 如您所见,代码可以很好地更改函数。 输出:

  • 问题内容: 我有一项通过REST为我提供属性的服务。现在,我想将身体解组为属性结构。请查看此操场示例:单击。当我只有一个财产时,可以轻松将其编组为。但是,服务器发出的ACTUAL响应有所不同。我要解组的实际响应是这样的: 不幸的是,我不知道如何解组。有人可以指出正确的方向吗? 问题答案: 您需要解组一片属性:http : //play.golang.org/p/eRgjfBHypH

  • 问题内容: 我正试图解组该文件: 进入这个结构: 使用以下说明: 问题是在“ json-schema@0.2.3”中,我们有一个许可证数组而不是一个字符串,由于这个原因,我显然得到了 有没有一种方法可以自动处理可以是数组或字符串的字段? 谢谢 问题答案: 不幸的是,软件包没有提供真正的自动解决方案。 但是您可以将依赖项解组为a 而不是。只是一个,因此您可以根据第一个字节确定消息的类型。 例: 另一

  • 问题内容: 我想得到一个表示像这样的json的字符串: {“投票”:{“ option_A”:“ 3”}} 并在其中包含一个“计数”键, 这样结束: {“投票”:{“ option_A”:“ 3”},“ count”:“ 1”} 这就是为什么我计划将其转换为json以便可以添加计数然后再次将其设置为字符串的原因。 问题是我不知道该json的结构 ,所以我无法使用,因为该结构有所不同。我怎样才能做到