使用JSON的所有示例都描述了如何序列化为JSON
简单或用户类型(如结构)。
但我有不同的情况:a)我不知道我的类型/对象的字段b)每个对象都有不同的类型。
这是我的伪代码案例:
while `select * from item` do
while `select fieldname, fieldvalue from fields where fields.itemid = item.id` do
...
对于我数据库中的每个实体,我获得字段名称和字段值。结果我需要得到这样的东西:
{
"item.field1": value,
...
"item.fieldN": value,
"custom_fields": {
"fields.field1": value,
...
"fields.fieldK": value
}
}
Go中最好的方法是什么?标准库中是否有任何有用的库或函数?
更新:数据来源是数据库。在结果中,我需要将JSON作为字符串发送到外部Web服务。因此,程序只是从数据库读取数据并向REST服务发出POST请求。
答案 0 :(得分:1)
你的目标类型应该是什么?它不是一个结构,因为你事先不知道这些字段。
对我来说唯一合适的类型似乎是map
map[string]interface{}
类型:可以实现任何嵌套结构:
a := map[string]interface{}{
"item.field1": "val1",
"item.field2": "val2",
"item.fieldN": "valN",
"custom_fields": map[string]interface{}{
"fields.field1": "cval1",
"fields.field2": "cval2",
},
}
b, err := json.Marshal(a)
请参阅playground sample here。
如您所暗示的那样从数据库中填充此结构应该是自定义脚本(不使用json)。
注意:custom_fields
也可以是其他类型,具体取决于值列在数据库中的类型。如果value列是字符串,请使用map[string]string
。