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

API Gateway VTL无法通过变量访问$input.json嵌套数组元素

问题原因

你遇到的问题是因为$input.json()的路径参数是字符串字面量,直接写$.Items[$i]时,VTL不会把$i解析成循环变量的数值,而是把它当作路径的一部分(也就是实际查找的是$.Items[$i]这个不存在的路径),所以返回空字符串。另外你原来的循环范围[$start..$end]也有问题——$end是$.Count,而数组索引是从0到Count-1,这样最后一次循环会访问越界的索引,同样返回空。

解决方法

推荐两种更可靠的写法,直接遍历数组或者正确处理索引:

方法一:直接遍历Items数组(更简洁)

不用手动处理索引,直接遍历整个Items数组,代码更直观:

#set($items = $input.path('$.Items'))
[
    #foreach($item in $items)
      {
        "root": $input.json('$.Items[0]'),
        "root2": $util.toJson($item)
      }#if($foreach.hasNext),#end
    #end
]

方法二:正确使用索引访问

如果必须用索引循环,先把数组赋值给变量,再通过VTL数组语法访问元素:

#set($items = $input.path('$.Items'))
#set($count = $input.path('$.Count'))
[
    #foreach($i in [0..$count-1])
      {
        "root": $input.json('$.Items[0]'),
        "root2": $util.toJson($items[$i])
      }#if($foreach.hasNext),#end
    #end
]
关键修改点
  • 先通过$input.path('$.Items')把整个数组取出赋值给$items,这样可以用VTL的$items[$i]语法直接访问元素
  • 用$util.toJson()把数组元素转换成合法的JSON字符串,保证输出格式正确
  • 添加#if($foreach.hasNext),#end处理逗号,避免最后一个元素后多出逗号导致JSON格式错误
  • 循环范围修正为[0..$count-1],避免索引越界

内容的提问来源于stack exchange,提问作者romanbird

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:55:12