在 AWS AppSync 中对 SQL 查询的 JSON 对象进行字符串化

2023-12-08

Question:如何在 Appsync 速度模板中对 SQL 语句的 JSON 对象进行字符串化?

解释:我有一个 Aurora RDS 表,其中有一列数据类型为 JSON。 AppSync API 已连接到 RDS。 我的 GraphQL 模式看起来像

input CreateServiceCatalogItemInput {
    serviceName: String!
    serviceConfig: ServiceConfigInput!
}

type Mutation {
    createServiceCatalogItem(input: CreateServiceCatalogItemInput!): ServiceCatalogItem
}

type Query {
    getAllServiceCatalogItem: [ServiceCatalogItem]
}

type ServiceCatalogItem {
    serviceId: ID!
    serviceName: String!
    serviceConfig: ServiceConfig!
}

type ServiceConfig {
    connectionType: String
    capacity: Int
}

input ServiceConfigInput {
    connectionType: String
    capacity: Int
}

schema {
    query: Query
    mutation: Mutation
}

我的 createServiceCatalogItem 突变解析器看起来像

{
    "version": "2018-05-29",
    "statements": [
        "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.toString($ctx.args.input.serviceConfig)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
    ]
}

这引发了我的错误:

在 com.amazonaws.deepdish.transform.util.TransformUtils 类中调用方法“toString”引发异常 java.lang.IllegalArgumentException:参数数量错误...

If I do:

{
    "version": "2018-05-29",
    "statements": [
        "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.toJson($ctx.args.input.serviceConfig)') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
    ]
}

这引发了我的错误:

无法解析 JSON 文档:'意外字符('c'(代码 99)):需要逗号分隔数组条目\n at ...

If I do:

{
    "version": "2018-05-29",
    "statements": [
        "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$ctx.args.input.serviceConfig') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
    ]
}

然后我得到了有道理的错误:

RDSHttp:{"message":"错误:json 类型的输入语法无效\n 详细信息:令牌 \"connectionType\" 无效。\n 位置:222\n 其中:JSON 数据,第 1 行:{connectionType..." }

但是,当我在解析器中对 JSON 进行硬编码时,它会起作用:

{
    "version": "2018-05-29",
    "statements": [
        "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '{\"connectionType\":\"ftth\",\"capacity\":1}') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
    ]
}

那么如何将 {connectionType=ftth,capacity=1} 转换为 {"connectionType":"ftth", "capacity":1} ?我做错了什么或者我错过了什么?任何帮助将不胜感激。


您可以像这样构建一个 JSON 变量:

#set($json = $util.toJson({
  "connectionType": "$ctx.args.input.serviceConfig.connectionType",
  "capacity": $ctx.args.input.serviceConfig.capacity
  }))

并在您的查询中插入:

{
    "version": "2018-05-29",
    "statements": [
        "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '$util.escapeJavaScript($json)' RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
    ]
}

由于所有的引号和转义,上面有点具有挑战性,但我认为使用escapeJavaScript会成功的。

或者直接:

{
    "version": "2018-05-29",
    "statements": [
        "INSERT INTO b2b_service_catalog(service_name, service_config) VALUES ('$ctx.args.input.serviceName', '{\"connectionType\":\"$ctx.args.input.serviceConfig.connectionType\",\"capacity\": $ctx.args.input.serviceConfig.capacity}') RETURNING service_id AS \"serviceId\", service_name AS \"serviceName\", service_config AS \"serviceConfig\"",
    ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AWS AppSync 中对 SQL 查询的 JSON 对象进行字符串化 的相关文章

随机推荐

  • 使用未解析的标识符 countElements [重复]

    这个问题在这里已经有答案了 let newLength countElements textField text countElements string range length 当我运行我的应用程序时 它突然显示无法解析的标识符的错误
  • 列出 Google 应用脚本项目

    我正在尝试使用文档中的 Google Drive File API 列出我的所有 google 脚本文件here 然而我总是得到一个空的 列表 我认为我的令牌和范围都很好 因为我从 Google OAuth2 取回了这个 access to
  • 在内连接的 ON 子句中放置条件与主查询的 where 子句中放置条件之间是否存在逻辑差异?

    考虑这两个相似的 SQL ON 子句中的条件 select t1 field1 t2 field1 from table1 t1 inner join table2 t2 on t1 id t2 id and t1 boolfield 1
  • 使用AVPlayer观看透明视频

    我正在尝试观看具有 Alpha 通道的视频女巫 背景是透明的 唯一的问题是我似乎不知道如何使播放器的背景透明 我知道我必须使用 AVplayer 但我无法访问它的 view 属性 如何将其添加到子视图并添加图层 NSString path
  • jQuery float bar 数字:数字定位

    我在用着jquery flot barnumbers js的插件jQuery 的 Javascript 绘图 图表 库在栏上显示数字 My code plot placeholderByDay data DataOne label Tota
  • Rails,生产环境,“对象不缺少常量”

    所以我觉得我很愚蠢 很长一段时间没有检查在生产环境中的运行 现在我正在尝试部署 我遇到了这个恼人的错误 有任何想法吗 lib history tools rb module HistoryTools def self included ba
  • PHP:如何从时区名称(例如:America/New_York)获取时区值(例如:东部标准时间)?

    是否有 PHP 函数可以在时区名称之间进行转换 例如此处找到的函数 http php net manual en timezones america php 和 值 例如东部标准时间或太平洋夏令时间 不想在区域之间进行转换 只需获取给定 A
  • 使用文本缩放 svg 以适合 viewBox

    很难知道文本需要什么尺寸 尤其是在旋转时 这样一来 很容易把viewBox弄得太小 然后文字就消失在viewBox之外了 然而 如果 viewBox 太大 那么就会有大量额外的空白区域也会被缩放 有没有办法缩放 viewBox 或 svg
  • PWA 离线模式无法从移动浏览器上的缓存加载

    我写了一个简单的 PWA 当前版本 基于本教程 by Vaadin 它运行良好 在 Chrome 中进行了测试 也在离线模式下进行了测试 在移动设备上使用它时 会出现问题 保存PWA后 启动一次 运行良好 然后关闭后 打开飞行模式并重新启动
  • jQuery Mobile 滑块更改事件

    我在监听 jQuery Mobile 滑块的更改事件时遇到困难 在该页面中 事件正确触发了事件 slidestop http jsfiddle net 2HEcY The same我页面中的代码不会触发任何内容 http www maria
  • 函数“execle”错误的隐式声明

    我不断得到 函数 execle 的隐式声明在 C99 中无效 编译下面的代码时 我缺少什么 include
  • 重新安装后的 Haskell 环境

    我最近重新安装了我的 Haskell 环境 因为我认为在将我的 Mac OS X 更新到 Mavericks 后 我已经无法恢复它了 现在每次我跑步cabal install cabal install 我收到以下错误 Resolving
  • 发送电子邮件到本地域

    我有一个从网站发送电子邮件的简单方法 local vars using var mail new MailMessage from sendTo using var smtp new SmtpClient mail CC Add cc ma
  • Lua中获取随机数的其他方法

    我正在寻找一种替代方法来在Lua中获取一个介于最小和最大数字之间的随机数 而不使用math random 有什么办法吗 它不一定是一个简单的方法 就像评论所暗示的那样 在类 Unix 系统上 您可以从中读取字节 dev random or
  • 如何转换 Oracle 中的“旧版”左外连接语句?

    我在 Oracle 数据库中有两个表 A 和 G 可以根据帐号将它们连接在一起 需要注意的是 其中一个表 G 的记录比另一个表少大约 80 条 当我一起查询两个表时 我需要获取所有行 以便我们在缺失的 80 行的列中看到 NULL 数据 我
  • 科尔多瓦中的文件大小函数

    也许这是一个简单的问题 但我已经搜索了两天 但找不到答案 我正在科尔多瓦开发一个文件管理器只是为了学习科尔多瓦插件文件 我使用此函数获得了文件夹中的文件列表 window resolveLocalFileSystemURL cordova
  • 量角器 - 无法读取未定义的属性“$$testability”

    我收到一条错误 内容如下 Error while waiting for Protractor to synce with the page Cannot read property testability of undefined 下面是
  • Scala - 用特定文本替换 xml 元素

    所以我有这个XML a blah a 我想把它改成 a someValueIDoNotKnowAtCompileTime a 目前 我正在看这个问题 然而 这只是将值更改为 2 我想要的是完全相同的东西 但是能够定义值 以便它可以在运行时更
  • 从主机名获取域名扩展

    Extract 域名扩展 e g com 不是使用正则表达式从主机名中获取的域名 例如 google com 输入 gt 输出 www google com gt com google com gt com google co uk gt
  • 在 AWS AppSync 中对 SQL 查询的 JSON 对象进行字符串化

    Question 如何在 Appsync 速度模板中对 SQL 语句的 JSON 对象进行字符串化 解释 我有一个 Aurora RDS 表 其中有一列数据类型为 JSON AppSync API 已连接到 RDS 我的 GraphQL 模