【发布时间】:2021-07-04 20:23:13
【问题描述】:
Golang 专家您好,
-
我正在使用 golang 中的 Machinebox“github.com/machinebox/graphql”库作为我的 GraphQL 服务器的客户端。
-
单层 JSON 变量的突变工作正常
-
但是,我不知道如何将嵌套的 JSON 作为变量传递
-
对于单层 JSON,我只需创建一个
map[string]string类型并传递给 Var 方法。这反过来填充了我的 graphql$data变量 -
machinebox (graphql.Request).Var 方法采用空的
interface{}作为值,因此map[string]string工作正常。但是嵌入的 json 只会抛出错误。
代码:
func Mutate(data map[string]string, mutation string) interface{} {
client := GQLClient()
graphqlRequest := graphql.NewRequest(mutation)
graphqlRequest.Var("data", data)
var graphqlResponse interface{}
if err := client.Run(context.Background(), graphqlRequest, &graphqlResponse); err != nil {
panic(err)
}
return graphqlResponse
}
变异:
mutation createWfLog($data: WfLogCreateInput)
{
createWfLog (data: $data){
taskGUID {
id
status
notes
}
event
log
createdBy
}
}
数据变量形状:
{
"data": {
"event": "Task Create",
"taskGUID": {
"connect": {"id": "606f46cdbbe767001a3b4707"}
},
"log": "my log and information",
"createdBy": "calvin cheng"
}
}
如前所述,嵌入式 json(taskGUID 的值)存在问题。如果 value 是简单的字符串类型,那不是问题。
- 已尝试使用结构来定义每个嵌套,传入结构。
- 已尝试将结构解组为 json。同样的错误。
任何帮助表示赞赏
卡尔文
【问题讨论】:
-
你是如何创建结构的?是否导出了所有字段,就像所有结构字段名称都以大写字母开头一样?您可以使用this 之类的工具来生成结构定义。
-
是的,所有字段都用大写字母导出。嵌套字段也定义了自己的结构。有趣的是,我想知道 (graphql.Request).Var(key, value) 是否真的支持嵌套映射。例如,如果您要使用 gin 来响应使用
c.JSON("200", response)的端点请求 - 自动将您的嵌套地图响应转换为 json。还有@xarantolus,感谢工具链接!太酷了!