是否有可能将对象数组(json)作为突变的输入字段传递?石墨烯-蟒蛇

     2023-03-08     92

关键词:

【中文标题】是否有可能将对象数组(json)作为突变的输入字段传递?石墨烯-蟒蛇【英文标题】:is there possible chance to pass array of objects (json) as input field for mutation? graphene-python 【发布时间】:2018-06-13 17:38:19 【问题描述】:

我正在尝试将 json 字段作为我的 graphql 突变的输入。 我一直在尝试和寻找,但没有运气。我可以通过定义 graphene.List(graphene.String) 来很好地传递数组。

我认为有一个名为 graphene.JSONstring() 的类型,如果我将它与 graphene.List(graphene.JSONstring) 一起使用,我认为它会起作用,但没有运气,仍然收到错误说类型不正确。

我在突变期间有这样的事情

    mutation 
        create(data:
                field1: [
                    
                        "first": "first",
                        "last": "last"
                    ,
                    
                        "first":"first1",
                        "last":"last1"
                    
                ]
        )
    

关于输入类

class NameInput(graphene.InputObjectType):
    # please ignore the same field names, just listing what I have tried
    field1 = graphene.JSONString()  
    field1 = graphene.List(graphene.JSONString)
    field1 = graphene.List(graphene.String)

有人知道这将如何工作吗?

提前致谢

【问题讨论】:

【参考方案1】:

似乎您正在尝试嵌套输入对象。不幸的是,我从未使用过石墨烯,但也许我可以根据 GraphQL 规范来回答,然后对石墨烯代码做出有根据的猜测:

type Mutation 
  create(data: NameInput): Boolean # <- Please don't return just Boolean


input NameInput 
  field1: FistLastInput[]


input FirstLastInput 
  first: String!
  last: String!

这意味着您将需要两个输入对象来描述输入的结构。为您的对象创建一个新类,该类采用 firstlast 字段:

class FirstLastInput(graphene.InputObjectType):
    first = graphene.NonNull(graphene.String)
    last = graphene.NonNull(graphene.String)

现在我们可以在初始查询中使用输入对象:

class NameInput(graphene.InputObjectType):
    field1 = graphene.List(FirstLastInput)

【讨论】:

【参考方案2】:

你可以这样尝试:

class NameInput(graphene.InputObjectType):
    field1 = graphene.JSONString()

然后:

mutation 
    create(data:
            field1: "[
                
                    \"first\": \"first\",
                    \"last\": \"last\"
                ,
                
                    \"first\":\"first1\",
                    \"last\":\"last1\"
                
            ]"
    )

所以基本上将 json 作为字符串发送。

【讨论】:

【参考方案3】:

Graphene 提供了一个GenericScalar 类型。您可以使用它来输入/输出泛型类型,例如intstrdictlist 等。

from graphene import InputObjectType, Mutation
from graphene.types.generic import GenericScalar

class InputObject(InputObjectType):
    field1 = GenericScalar()

class Create(Mutation):
    class Arguments:
        data = InputObject()

    def mutate(root, info, data):
        # do something with data.field1

那么你的输入看起来像

mutation 
  create (
    data: 
      field1: [
        
          first: "first",
          last: "last"
        ,
        
          first: "first1",
          last: "last1"
        
      ]
    
  )

请注意,field1 可以接受任何通用输入,因此请务必对其进行验证。

此外,当使用GenericScalar 字段进行输出(查询)时,您将无法查询其子字段。但是您可以为该字段编写解析器,以确保只返回特定的子字段。

Here 是相应 GitHub 问题的链接。

【讨论】:

有没有办法将一组表单输入字段作为对象数组发布?

】有没有办法将一组表单输入字段作为对象数组发布?【英文标题】:IsthereawaytoPOSTagroupofforminputfieldsasanobjectarray?【发布时间】:2020-01-0909:27:40【问题描述】:我正在向HTML表单动态添加一组输入并发布此表单,并希望将表单数据... 查看详情

对象作为突变中的输入变量:GraphQL - Apollo - React

】对象作为突变中的输入变量:GraphQL-Apollo-React【英文标题】:Objectasinputvariableinmutation:GraphQL-Apollo-React【发布时间】:2020-05-1812:44:57【问题描述】:我在两个独立的repo中有一个React客户端项目和一个Node.js/GraphQLapi。在我的React应... 查看详情

如何将对象作为方法输入参数而不是作为参数数组传播?

】如何将对象作为方法输入参数而不是作为参数数组传播?【英文标题】:Howtospreadobjectasmethodinputparameterbutnotasargumentsarray?【发布时间】:2020-12-2300:31:51【问题描述】:我有一个函数需要乘法参数和一个输入对象,其中包含与参... 查看详情

Jolt 将多个对象转换为具有新字段名称的数组

...09:55:44【问题描述】:我是使用jolt工具的新手,我想知道是否有办法获取几个json对象并将它们放入一个具有如下新字段的数组中:输入:"userId":1,"age":20,"desc1":"valuedesc1","desc2":"val 查看详情

在 graphQL 中提交对象数组作为查询变量

】在graphQL中提交对象数组作为查询变量【英文标题】:SubmitanarrayofobjectsasaqueryvariableingraphQL【发布时间】:2018-02-0504:56:21【问题描述】:当其中一个字段是对象数组时,如何将查询参数构造为graphQL突变?当我对突变进行硬编码... 查看详情

如何设置映射输入的嵌套 JSON 数组对象的状态

】如何设置映射输入的嵌套JSON数组对象的状态【英文标题】:HowtosetStateofnestedJSONarrayobjectofmappedinput【发布时间】:2019-10-2403:36:40【问题描述】:我有一个JSON文件,其中包含多个类别,每个类别都有一个名称,其中包含一组具有... 查看详情

如何将信息作为数组python保存到json

...前的信息。但是我不知道如何检索特定的信息。我想知道是否有一种方法可以将 查看详情

使用现有对象作为突变的输入

】使用现有对象作为突变的输入【英文标题】:Usingexistingobjectsasinputinamutation【发布时间】:2021-10-1816:44:42【问题描述】:我正在ASP.NET上使用HotChocolate构建一个graphqlAPI。我有两种类型,role和permission。permission由id、名称和描述组... 查看详情

如何将值输入到 Gatling 的 json 数组中的字段中?

...ame":"Jack"]我创建了一个文件feeder.json,其中包含上面的json对象数组 查看详情

在不同的突变中使用相同对象的输入类型

】在不同的突变中使用相同对象的输入类型【英文标题】:Usinginputtypesofthesameobjectindifferentmutations【发布时间】:2018-12-2411:30:51【问题描述】:我有一个输入类型,我想在多个突变中使用它。它从一种突变到另一种突变的唯一区... 查看详情

如何将我从输入中获得的对象放入 JSON 数组中?

...】:我正在做一个天气预报控制台应用程序。我询问用户是否要保存输入位置。当他们输入经度和纬度时,它会保存在JSON文件中,因此稍后(第二次尝试)他们可以从列表中选择城市。问题是当城市对象保存在JSON文件中时,它... 查看详情

如何在 GraphQL 突变中使用 FaunaDB 将数组传递给字段

】如何在GraphQL突变中使用FaunaDB将数组传递给字段【英文标题】:HowtoinGraphQLmutationpassanarraytoafieldusingFaunaDB【发布时间】:2021-06-2212:36:45【问题描述】:我不认为我以正确的graphQL方式做事,但我不确定如何在graphQL中实现它。我有... 查看详情

从对象到数组的 JSON 响应

...5:48:12【问题描述】:我的laravel将json作为对象返回,它有可能(我猜是的)让它返回数组吗?由此:“数据”:[]对此:[“数据”:[]]我已经尝试过array_values,但它会削减“数据”:,response()->json()与array_values削减“数据”一... 查看详情

将带有数组的 json 结构展平为多个没有数组的平面对象

...【发布时间】:2019-02-0301:43:39【问题描述】:我不确定我是否100%正确地描述了主题中的问题,但我相信这些示例可以解决问题。我有如下JSON结构(注意:这可能会改变,所以我需要倾向于通用解决方案)一张包含多个行项目的... 查看详情

跨越文本输入字段?

...textinputfield?【发布时间】:2011-09-2320:35:39【问题描述】:是否有可能将跨度作为文本输入字段的值?我正在为网站制作一个邮件系统,并且想要一个漂亮的接收者输入字段,其中包含添加的接收者并添加到输入文本字段的值中。... 查看详情

AppSync,使用 graphql-tag 将数组作为输入参数传递

】AppSync,使用graphql-tag将数组作为输入参数传递【英文标题】:AppSync,passarrayasaninputargumentwithgraphql-tag【发布时间】:2019-02-1711:04:01【问题描述】:我正在使用带有react-native的appSync,我在我的架构中定义了一个突变,如下所示:M... 查看详情

中继突变。脂肪查询。询问 REQUIRED_CHILDREN 中的所有字段

...组的REQUIRE_CHILDREN配置。如何从有效负载对象中获取所有可能的字段?type:\'REQUIRED_CHILDRE 查看详情

输入对象数组作为输入并返回一个数组作为存储过程的输出

】输入对象数组作为输入并返回一个数组作为存储过程的输出【英文标题】:InputarrayofobjectsasinputandreturnanarrayasoutputfromStoredProcedure【发布时间】:2019-10-0712:20:43【问题描述】:我有一个要求,我需要将嵌套的对象数组作为输入传... 查看详情