You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS AppSync JavaScript解析器(NONE数据源)解析String字段时出现转换错误的解决咨询

AWS AppSync JavaScript解析器(NONE数据源)解析String字段时出现转换错误的解决咨询

看起来你遇到的问题是因为Pipeline解析器的响应模板没有正确处理JavaScript函数返回的字符串值,导致AppSync试图把裸字符串解析成JSON对象失败了。让我一步步帮你梳理问题并解决:

错误根源分析

你看到的错误提示 Unable to convert 123Another City to Object. 是关键:
你的JS函数返回的是一个纯字符串,但当前Resolver的响应模板 $context.result 直接输出了这个裸字符串。AppSync要求响应模板输出合法的JSON格式,而没有被引号包裹的裸字符串不属于合法的JSON对象,因此触发了转换错误。


解决方案(两种可选)

方案一:修改Resolver的响应模板(最简单直接)

直接调整Terraform中的响应模板,让输出成为合法的JSON字符串:

方式1:用双引号手动包裹结果

修改Terraform资源配置:

resource "aws_appsync_resolver" "translatePlace" {
  api_id            = var.app-sync-id
  field             = "name"
  type              = "Place"
  request_template  = "{}"
  # 用双引号包裹结果,输出合法JSON字符串
  response_template = "\"$context.result\""
  kind              = "PIPELINE"

  pipeline_config {
    functions = [
      module.translatePlace.appsync-function.function_id
    ]
  }

  depends_on = [module.translatePlace]
}
方式2:使用AppSync内置工具函数

用$util.toJson()自动将结果转为合法JSON格式(字符串会自动被加上引号):

response_template = "$util.toJson($context.result)"

方案二:修改JavaScript函数的返回结构(更规范)

如果你希望保持函数返回对象结构的习惯,可以调整JS函数的响应逻辑,再通过模板提取对应值:

  1. 修改你的JavaScript函数:
export function response(context) {
  // 返回包含字段的对象,而非直接返回字符串
  return { translatedName: context.result.translatedName };
}
  1. 同步修改Terraform的响应模板:
response_template = "$context.result.translatedName"

不管选择哪种方案,调整后AppSync都能正确识别并返回转换后的字符串值,不会再抛出转换错误了。

备注:内容来源于stack exchange,提问作者Rastislav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 18:14:35