为了账号安全,请及时绑定邮箱和手机立即绑定

将 JSON.RawMessage 转换为 JSON

将 JSON.RawMessage 转换为 JSON

Go
浮云间 2022-07-11 14:50:26
我正在使用gqlgen,sqlx和pgx. 我正在尝试为sqlx's使用自定义标量types.JSONText。我jsonb在项目表中有这个属性字段。-- migrations/001_up.sqlCREATE TABLE IF NOT EXISTS items (    id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),    quantity INT NOT NULL,    attributes JSONB);我有这些模型结构:// graph/model/item.gotype Item struct {    ID         string       `json:"id,omitempty" db:"id,omitempty"`    Quantity   int          `json:"quantity" db:"quantity"`    Attributes *Attributes  `json:"attributes,omitempty" db:"attributes,omitempty"`}type Attributes types.JSONText我有这个 graphql 架构:// graph/schema.graphqltype Item {  id: ID!  quantity: Int!  attributes: Attributes} scalar Attributes我可以成功插入数据库,但在检索时出错。| id            | quantity | attributes                         ||---------------|----------|------------------------------------|| 031e1489-...  | 100      | {"size": "medium", "color": "red"} |这是我从 db 查询中得到的日志:>> items.Db: &{  031e1489-02c9-46d3-924d-6a2edf1ca3ba // id  100                                  // quantity  0xc000430600                         // attributes}我试图编组属性标量:// graph/model/item.go...func (a *Attributes) MarshalGQL(w io.Writer) {    b, _ := json.Marshal(a)    w.Write(b)}// Unmarshal here...添加自定义标量类型gqlgen.yml:...  Attributes:    model:      - github.com/my-api/graph/model.Attributes但我得到的是字符串而不是 json:{  "data": {    "item": {      "id": "031e1489-02c9-46d3-924d-6a2edf1ca3ba",      "quantity": 100,      "attributes": "eyJjb2xvciI6ICJyZWQifQ==",    }  }}所需的输出是:{  "data": {    "item": {      "id": "031e1489-02c9-46d3-924d-6a2edf1ca3ba",      "quantity": 100,      "attributes": {        "size": "medium",        "color": "red",      }    }  }}我做错了什么?
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

Attributes使用types.JSONText定义 使用 定义 使用json.RawMessage定义[]byte。这意味着包括 在内的所有 4 种类型的底层类型都是,这反过来意味着所有 4 种类型都可以转换为。[]byte []byte[]byte


因此,这样做就足够了:


func (a *Attributes) MarshalGQL(w io.Writer) {

    w.Write([]byte(*a))

}


查看完整回答
反对 回复 2022-07-11
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信