
第一点用法可以参照这篇文章:https://xiuxiuing.blog.csdn.net/article/details/98059950
第二点: 这里涉及到一个使用场景: 一个模型数据库表, 这个模型可能是飞机模型,汽车模型等等。 他们可能有公共字段,比如型号,生产厂家。 但是其他的一些详细配置参数不是固定的。所以数据库没法建立字段。 所以就直接存一个json进数据库。 但是我操作后,存进去的json和原来的json,里面元素顺序不对了,这样前端再展示的时候,也没顺序了
我之前采用的做法就是 数据库字段定义为 datatypes.JSON(gorm)。 想直接把这个json对象存入数据库。 然后采用的gin框架。设置的结构体字段为 interface{}。 然后 1. BindJSON()接收, 然后再2. json.marshal,将转换后的结果赋值给 模型(字段类型就是datatypes.JSON) 存入数据库。 但是这样以转化 json对象的字段顺序就变了。 等把数据库存的 json对象返回给前端,遍历的时候里面属性的顺序就变了。
(更新):上面的datatypes.JSON实际上就是封装的 json.RawMessage。并且同样实现了两个方法,调用的还是 josn.RwaMessage 的方法:
(继续更新):今天又尝试写了一个 update更新接口, 全程采用 datatypes.JSON类型,发现从接收到传递给服务,一直顺序都没变,但是最后存入数据库,还是变了,看来这个和json的协议规定有关, json对象就不是有序的。 不过不是没有收获, 使用datatypes.JSON类型直接存json数据到数据库,方便省事。 除非有定义专门的结构体,做序列化和其他操作,不然直接用datatypes.JSON类型存json,方便。