我正在尝试做的是通过 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 架构对于我发送的对象类型来说可能是错误的,但没有发现任何问题。
我在 AppSync 中使用 GraphQL 的模式定义如下:
input CreateUserInput {
email: String!
data: AWSJSON
}
我发送的请求如下:
const dbReturn = await API.graphql(graphqlOperation(
mutations.createUser, {
input: {
"email": "fake.email@atdot.com",
"data": [{
"num": 34,
}]
}
}
));
错误信息是这样的:
"Variable 'data' has an invalid value. Unable to parse [{num=34}] as valid JSON."
令我困惑的是 "[{num=34}]"
不是我给它的输入。我正在发送它 [{"num": 34}]"
这是有效的 JSON。我希望它能够解析我的输入并将数据发送到我的 dynamo 表,因为 JSON 输入是有效的。
有人知道我可以做些什么来克服这个问题吗?感谢您的帮助!
最佳答案
想通了。答案在于 GraphQL 模式。
"createUser": {
"email": "Hello, world!",
"data": "{\"key\":\"value\"}",
}
“复杂数据类型”的输入只是一个字符串。因此,在发出请求时,您只需将数据作为 JSON.stringify(variable.data)
之类的内容传递。我希望这对一路走来的人有所帮助。
关于javascript - 如何通过 graphQL 和 AWS AppSync 发送 JSON 数组以将数据添加到 Dynamo 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57204857/