Graphql 不接受带引号的键

Posted

技术标签:

【中文标题】Graphql 不接受带引号的键【英文标题】:Graphql not accepting keys with quotes 【发布时间】:2019-09-26 10:47:26 【问题描述】:

我试图接受一个对象数组作为来自客户端的输入,但 graphql 由于格式原因拒绝了它。

"query': "mutationupdateDetails(input: [\"firstname\": \"Pradeep\",\"last\":\"G\", \"firstname\": \"sandeep\",\"last\":\"G\"])

Grqphql 抛出类似 Expected Name 但得到 String 的错误。这是因为名字是用引号编码的。但是我的客户正在使用 python 代码并且无法发送没有引号的密钥。我该如何解决?

【问题讨论】:

我正在使用 java 并将一个类与 JSON 协调起来,并且遇到与上述相同的问题,有人有解决方案吗? @Hacker 你是怎么解决的? 【参考方案1】:

您的 JSON 中似乎有一个小错字。您用双引号打开字符串,但在第一个属性query 之后,然后用单引号将其关闭。

请记住,graphql 查询不是 JSON。 GraphQL 定义了自己的语言。在 GraphQL 中,字符串必须用双引号引起来。不允许使用单引号。

并且变量(例如,您的示例中的突变)必须在没有任何引号的情况下发布。 http://spec.graphql.org/June2018/#sec-Language.Variables

我做什么:我创建 GraphQL 查询的值,即。手动查询属性的值。然后我才用 JSON 包装它。

这是我的 HTTP POST 实体:mime type = application/json

  String graphQLQueryString = " ... "   // this is not JSON!
  String jsonPayload = JSONObject().put("query", graphQLQueryString)

【讨论】:

以上是关于Graphql 不接受带引号的键的主要内容,如果未能解决你的问题,请参考以下文章

如何正确声明不带参数的 GraphQL 查询。

graphql-compose 在解析方法中不接受我的参数

在 Graphql 请求中发送双引号和反斜杠

有没有办法避免在 Apollo GraphQL 中返回具有空值的键?

GraphQL:接受缺少请求字段的查询响应?

GraphQL Dataloader 事先不知道键