【问题标题】:Passing nested JSON as variable in Machinebox GraphQL mutation using golang使用 golang 在 Machinebox GraphQL 突变中将嵌套 JSON 作为变量传递
【发布时间】: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,感谢工具链接!太酷了!

标签: go interface graphql


【解决方案1】:

我已经想通了......这是我对 Golang 的菜鸟的一个例子。

我不需要进行所有这些数据转换或任何此类疯狂的类型转换。出于某种原因,我脑海中的一切都必须是机器箱 Var(key, value) 工作的地图

感谢xarantolus 的引用site 我能够构建一个合适的支柱。我用我的变量数据(这是一个嵌套的 json)填充了支柱,突变运行得很好!

谢谢!

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 2019-08-24
    • 1970-01-01
    • 2021-08-14
    • 2019-11-19
    • 2017-08-22
    • 2020-05-05
    • 2020-04-24
    • 2018-08-24
    相关资源
    最近更新 更多