我正在使用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))
}
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报
0/150
提交
取消