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

如何正确传递嵌套数组作为GraphQL API的参数

嵌套数组传递到GraphQL后端后变为字符串的问题解决

场景与问题

我当前使用AWS AppSync,不过这个问题也适用于通用GraphQL/JavaScript/API场景。

需要传递以下嵌套数组数据作为API参数:

const DUMMY_DATA = [
  ['First Name', 'Last Name', 'company', 'email', 'phone', 'Address', 'City', 'State', 'Zip Code'],
  ['Lambert', 'Beckhouse', 'StackOverflow', 'lbeckhouse0@stackoverflow.com', '512-555-1738', '316 Arapahoe Way', 'Austin', 'TX', '78721'],
  ['Maryanna', 'Vassman', 'CDBABY', 'mvassman1@cdbaby.com', '479-204-8976', '1126 Troy Way', 'Fort Smith', 'AR', '72916']
]

调用API的代码如下:

try {
  await doAPIWork({data: DUMMY_DATA})
} catch (err) {
  console.error(err)
}

但数据到达后端后,嵌套数组的类型变为String,无法正常遍历——比如DUMMY_DATA[0]看起来是数组格式,但实际类型是字符串,无法转换回数组。试过两种Schema定义都未解决:

// 第一种尝试
type Mutation {
  doAPIWork(data: [String]): String
    @function(name: "doAPIWork-dev")
}

// 第二种尝试
type Mutation {
  doAPIWork(data: [AWSJSON]): String
    @function(name: "doAPIWork-dev")
}

解决办法

1. 匹配正确的GraphQL类型定义

你的数据是二维字符串数组,之前的Schema类型均不匹配:

  • [String]是一维字符串数组,无法容纳嵌套结构;
  • [AWSJSON]是一维JSON数组,同样不匹配二维数组格式。

直接用[[String]]定义二维字符串数组,这是最贴合数据结构的方案:

type Mutation {
  doAPIWork(data: [[String]]): String
    @function(name: "doAPIWork-dev")
}

这种情况下,前端直接传递原数组即可,AppSync会正确把二维数组传递到后端,不需要额外序列化/反序列化操作。

2. 用AWSJSON处理动态结构(数据结构不固定时)

如果数据结构可能变化,或者不想严格定义二维数组类型,可以用AWSJSON类型(注意不是数组形式):

  • 前端发送前将整个数组序列化为JSON字符串:
    await doAPIWork({ data: JSON.stringify(DUMMY_DATA) })
    
  • 修改Schema:
    type Mutation {
      doAPIWork(data: AWSJSON): String
        @function(name: "doAPIWork-dev")
    }
    
  • 后端接收后解析JSON字符串:
    // 以Lambda为例,从事件参数中取出数据解析
    const parsedData = JSON.parse(event.arguments.data);
    

3. 检查后端参数接收逻辑

如果用Lambda作为后端函数,确认Lambda事件参数中event.arguments.data的类型是否正确。使用[[String]]类型时,AppSync会直接传递数组对象,后端可直接遍历;如果用AWSJSON方案,必须手动将字符串解析为数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:25:18