使用Hasura插入JSON数据的Golang实现指南
使用Hasura插入JSON数据的Golang实现指南 大家好。我有一个关于Hasura和Golang的问题。我手头有一些JSON类型的数据,想要通过Hasura将它们写入Yugabytedb。我需要用Golang代码来实现这个功能。Hasura提供了GraphQL API,我可以轻松地使用查询功能,但其他功能却成了问题。
有人能在这方面帮助我吗?
3 回复
好的。问题已经解决了。我原本想说的是其他函数是更新、删除和插入。
更多关于使用Hasura插入JSON数据的Golang实现指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
baris.akdas:
但是其他函数有问题
哪些?
在Golang中通过Hasura插入JSON数据到YugabyteDB,可以使用GraphQL mutation操作。以下是具体实现示例:
首先安装必要的依赖:
go get github.com/hasura/go-graphql-client
然后创建插入JSON数据的Golang代码:
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/hasura/go-graphql-client"
)
// 定义GraphQL mutation结构
type InsertDataMutation struct {
InsertYourTable struct {
Returning []struct {
ID int `graphql:"id"`
Data json.RawMessage `graphql:"data"` // JSON类型字段
} `graphql:"returning"`
} `graphql:"insert_your_table(objects: $objects)"`
}
func main() {
// 初始化GraphQL客户端
client := graphql.NewClient(
"http://your-hasura-endpoint/v1/graphql",
&http.Client{},
).WithAdminSecret("your-admin-secret")
// 准备要插入的JSON数据
jsonData := map[string]interface{}{
"name": "example",
"value": 123,
"nested": map[string]string{
"field": "nested_value",
},
}
// 将Go结构体转换为JSON
jsonBytes, err := json.Marshal(jsonData)
if err != nil {
log.Fatal(err)
}
// 定义mutation变量
variables := map[string]interface{}{
"objects": []map[string]interface{}{
{
"data": json.RawMessage(jsonBytes),
},
},
}
// 执行mutation
var mutation InsertDataMutation
err = client.Mutate(context.Background(), &mutation, variables)
if err != nil {
log.Fatal(err)
}
fmt.Printf("插入成功,返回ID: %d\n", mutation.InsertYourTable.Returning[0].ID)
}
如果需要批量插入,可以修改variables部分:
// 批量插入多个JSON对象
variables := map[string]interface{}{
"objects": []map[string]interface{}{
{
"data": json.RawMessage(`{"name": "first", "value": 1}`),
},
{
"data": json.RawMessage(`{"name": "second", "value": 2}`),
},
},
}
对于动态JSON数据,可以使用json.RawMessage类型处理:
func insertDynamicJSON(client *graphql.Client, rawJSON string) error {
var mutation InsertDataMutation
variables := map[string]interface{}{
"objects": []map[string]interface{}{
{
"data": json.RawMessage(rawJSON),
},
},
}
return client.Mutate(context.Background(), &mutation, variables)
}
确保Hasura中对应的表已经定义了JSON或JSONB类型的字段,并且设置了适当的权限。

