Javascript 如何通过graphQL和AWS AppSync发送JSON数组以向Dynamo表添加数据?
我试图做的是通过AppSync从React本机应用程序发送数据,以便更新dynamo表上的用户数据。我可以执行所有CRUD操作,但不能执行数据列表。当我尝试时,我得到一个错误,即我发送的不是有效的JSON。但是,当我将输入作为有效的JSON传递到JSON linter中时,它将作为有效的JSON传递 为了尝试解决这个问题,我将输入流更改为最简单的流程。最初,我是从本地缓存的已解析JSON字符串中提取JSON。我认为JSON.parse(obj)函数可能有问题。那不合乎情理。因此,我将所有输入从一个JS对象中移出,并放入一个JSON中,该JSON事先没有存储在变量中,而是直接传递给我正在使用的API() 在这不起作用之后,我认为我的GraphQL模式对于我发送的对象类型可能是错误的,但没有发现任何错误 使用GraphQL的AppSync中的我的架构定义如下:Javascript 如何通过graphQL和AWS AppSync发送JSON数组以向Dynamo表添加数据?,javascript,amazon-dynamodb,aws-appsync,Javascript,Amazon Dynamodb,Aws Appsync,我试图做的是通过AppSync从React本机应用程序发送数据,以便更新dynamo表上的用户数据。我可以执行所有CRUD操作,但不能执行数据列表。当我尝试时,我得到一个错误,即我发送的不是有效的JSON。但是,当我将输入作为有效的JSON传递到JSON linter中时,它将作为有效的JSON传递 为了尝试解决这个问题,我将输入流更改为最简单的流程。最初,我是从本地缓存的已解析JSON字符串中提取JSON。我认为JSON.parse(obj)函数可能有问题。那不合乎情理。因此,我将所有输入从一
input CreateUserInput {
email: String!
data: AWSJSON
}
我发出的请求如下:
const dbReturn = await API.graphql(graphqlOperation(
mutations.createUser, {
input: {
"email": "fake.email@atdot.com",
"data": [{
"num": 34,
}]
}
}
));
错误消息显示:
变量“data”的值无效。无法将[{num=34}]作为
有效的JSON。“
让我困惑的是,“[{num=34}]”
不是我给出的输入。我正在发送它,它是有效的JSON。我希望它能够解析我的输入并将数据发送到dynamo表,因为JSON输入是有效的
有人知道我能做些什么来克服这一切吗?谢谢你的帮助 找到了答案。答案在于GraphQL模式
"createUser": {
"email": "Hello, world!",
"data": "{\"key\":\"value\"}",
}
“复杂数据类型”的输入只是一个字符串。因此,在发出请求时,您只需将数据作为类似于
JSON.stringify(variable.data)
的内容传入即可。我希望这能帮助一些人。我的问题正好相反。我不是使用代码创建查询,而是直接使用gql。如果我在输入中使用字符串,那么我会在数据库中得到一个字符串化的JSON,这不是我想要的。
相反,我必须确保周围没有引号-在你的例子中,num
模式
Item {
data: AWSJSON
}
ItemInput {
data: AWSJSON
}
查询
mutation {
createUser {
data: { num: 34 } // Not { "num": 34 }
}
}
这确保了我的数据不是以字符串形式存储的,并且在查询时,我得到的是可解析的JSON,而不是引号转义的字符串
我的VTL模板在突变上做了任何不寻常的事情,但在查询时,我会返回:
{
"data" : $util.toJson($ctx.result.get('data')) // OR $ctx.result.get('data').toJSON()
}
在这幅图中,源是AWSJSON类型,它可以保存对象或数组,如果您想使用变体,因为它是JSON对象,您需要执行escape以在应用程序同步中创建该项。
这叫逃逸:)