【发布时间】:2021-09-28 12:19:18
【问题描述】:
在某些情况下,我正在设计一个将接收 JSON 发布数据的后端,但数据的本质是它具有非结构化的字段。我的一般研究告诉我这是一个静态语言与非结构化数据的问题。
通常,如果数据是众所周知的并且只是解组到结构中,则可以为其创建结构。我为嵌套对象创建了自定义解组函数。
现在的问题是其中一个字段可能包含具有任意数量键的对象。提供一些代码上下文:
properties: {
"k1": "v1",
"k2": "v2",
"k3": "v3",
...
}
type Device struct {
id: string,
name: string,
status: int,
properties: <what would i put here?>
}
所以很难为它编写一个显式的解组函数。应该放一个map[string]string{}的类型?如果这些值不是所有字符串,它将如何工作?如果那个对象本身也有嵌套的值/对象呢?
【问题讨论】:
-
使用
map[string]interface{}。或者甚至只是interface{},如果数据可以包含除对象之外的 JSON 值,如数组或字符串、数字等原语。 -
var d Device err := json.Unmarshal([]byte(
), &d) 这样有意义吗? -
这是将 json 解组为结构的常用方法,但我不确定这与您的原始问题有什么关系。请记住,为了能够将 json 编组到结构体中,必须导出字段。
-
你也可以使用
json.RawMessage类型。
标签: json go unmarshalling