如何通过 graphQL 和 AWS AppSync 发送 JSON 数组以将数据添加到 Dynamo Table?

Ian*_*rko 4 javascript amazon-dynamodb aws-appsync

我想要做的是通过 AppSync 从 React Native 应用程序发送数据,以便我可以更新 dynamo 表上的用户数据。我可以执行我所有的 CRUD 操作,而不是数据列表。当我尝试时,我收到一个错误,指出我发送的不是有效的 JSON。但是,当我将输入通过 JSON linter 时,我的输入将作为有效的 JSON 传递。

为了尝试解决这个问题,我已将输入流程更改为最简单的流程。最初我是从本地缓存的解析 JSON 字符串中提取我的 JSON。我认为 JSON.parse(obj) 函数可能存在问题。那是站不住脚的。因此,我将所有输入从 JS 对象移到了一个 JSON 中,该 JSON 未预先存储在变量中,而是直接传递给我正在使用的 API(https://aws-amplify.github.io/docs /js/api)。

在这不起作用之后,我想也许我的 GraphQL Schema 对于我发送的对象类型是错误的,但没有发现任何问题。

我在 AppSync 中使用 GraphQL 的架构定义如下:

input CreateUserInput {
  email: String!
  data: AWSJSON
}
Run Code Online (Sandbox Code Playgroud)

我发送的请求如下:

const dbReturn = await API.graphql(graphqlOperation(
  mutations.createUser, {
    input: {
      "email": "fake.email@atdot.com",
      "data": [{
        "num": 34,
      }]
    }
  }
));
Run Code Online (Sandbox Code Playgroud)

错误消息说:

“变量‘数据’的值无效。无法将 [{num=34}] 解析为有效的 JSON。”

令我困惑的是,这"[{num=34}]"不是我给它的输入。我正在发送它"[{"num": 34}]"是有效的 JSON。我希望它能够解析我的输入并将数据发送到我的发电机表,因为 JSON 输入是有效的。

任何人都知道我能做些什么来克服这个问题?感谢您的帮助!

Ian*_*rko 9

弄清楚了。答案在于 GraphQL 模式。

"createUser": {
    "email": "Hello, world!",
    "data": "{\"key\":\"value\"}",
}
Run Code Online (Sandbox Code Playgroud)

“复杂数据类型”的输入只是一个字符串。因此,在发出请求时,您只需将数据作为类似JSON.stringify(variable.data). 我希望这对一路上的人有所帮助。


Ido*_*her 5

在此图中,源是 AWSJSON 类型,可以保存对象或数组,如果您想使用突变,因为它是 JSON 对象,您将需要进行转义才能在应用程序同步中创建项目。 在此输入图像描述

在此输入图像描述