【发布时间】:2014-06-28 06:58:38
【问题描述】:
我有以下问题。我需要将structure 转换为map[string]interface{} 以便在数据库中执行更新(使用mgo 作为mongodb 的驱动程序)。
更新
对于部分更新 mongoDB 中的文档,(最佳)解决方案是转换为地图并删除不需要的字段。 struct到map的转换请参考my other post
原帖
我从客户端 javascript 接收数据并写入我的结构模型。但我不想更改/更新某些字段,因此我需要将我的结构转换为 map[string]interface{} 以删除不需要的字段。
将结构转换为 json 然后映射它是不行的,因为字段类型没有被保留。例如,让以下结构为Image model:
type Image struct {
Name string `json:name`
Views int `json:views,string`
Owner string `json:owner`
}
到目前为止一切顺利,但是当我从客户端(即 javascript)收到信息时,views 字段是一个字符串。如果我将客户端提供的 json 输入转换为映射,则视图字段仍然是一个字符串,并且该值的内部表示在数据库中发生更改。因此,下次我从数据库中读取此图像时,Views 字段将归零(因为它是数据库中的字符串表示形式)。
因此,我将来自客户端的 json 输入写入结构中(用于正确转换 Views 变量)。但是所有者值不应该改变(单一形式的数据库)。所以我需要再次将结构转换为 map[string]interface{} 并在数据库中进行更新之前处理该映射。
为此使用 json 包不是一个选项,因为 Views 字段中的字符串标签将从 int 转换为字符串(在转换为地图时)。
到目前为止,我已经尝试了以下将结构转换为映射的函数,并且我使用反射包,并且是使用它的菜鸟。不太了解这个包。
如果您能提出一些想法,我将不胜感激。 谢谢。
【问题讨论】:
-
client json->struct->json->map->database怎么样?很慢但很简单吗? -
@nvcnvn 这不是一个解决方案,因为从 struct -> json 转换时,views 字段被转换为字符串(因为字符串标签)。从 json 写入 struct 时,views 字段上没有字符串标签会导致错误。
-
对不起,你能做到吗
client json->struct->xml/gob->map->database。由于标签只适用于 json 包。 -
我认为 xml 将是唯一的解决方案。 gob 期望以相同的结构类型解码。我可能会尝试 xml,但认为这是我将使用的最后一个解决方案,使用这么多转换会减慢很多。谢谢。
-
顺便说一句,您使用的是
mgo包吗?你为什么不只使用更新部分?