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

如何在DeepLink/URL中传递数组、对象数组并解决方括号编码问题

首先明确:[、]属于URL规范中的保留字符,系统在处理URL时会自动对未编码的保留字符做百分号转义,直接在query参数中写[7,8]本身不符合URL参数格式标准,被自动编码是符合预期的系统行为。

基础类型数组传参

优先选用无特殊字符的通用写法,从根源上避免转义问题,常用方案有3种:

  • 重复同名参数(兼容性最高)
    这是URL传数组的标准约定,几乎所有前后端路由解析库都默认支持该格式,示例命令:
    xcrun simctl openurl booted "some-scheme://<pageName>?value=7&value=8"
    
    接收端解析时会自动将同名的value参数聚合为数组,拿到结果后按需转换元素类型即可,全程无特殊字符,不会被强制编码。
  • 逗号分隔单值(写法最简洁)
    直接用逗号拼接数组元素,不要在外层套方括号,示例命令:
    xcrun simctl openurl booted "some-scheme://<pageName>?value=7,8"
    
    接收端拿到value字符串后按逗号分割即可得到数组,同样不存在特殊字符转义问题。
  • 编码后保留方括号格式
    如果业务侧必须要用方括号包裹数组的格式,手动将方括号替换为URL编码即可:[对应%5B,]对应%5D,示例命令:
    xcrun simctl openurl booted "some-scheme://<pageName>?value=%5B7,8%5D"
    
    该方式传入后,URL解析器会自动将编码还原为方括号,但注意多数路由库不会自动将该格式的字符串解析为数组,需要自行实现反序列化逻辑,非必要不推荐使用。

对象数组传参

对象数组结构复杂度高,推荐两种稳定可落地的方案:

  • JSON序列化+URL编码(通用性最强,支持任意复杂结构)
    实现逻辑:先将目标对象数组序列化为标准JSON字符串,再对整个字符串做URL百分号编码,最后拼接到query参数中即可。
    例如要传递的对象数组为[{"id":1,"name":"test1"},{"id":2,"name":"test2"}],编码后示例命令:
    xcrun simctl openurl booted "some-scheme://<pageName>?list=%5B%7B%22id%22%3A1%2C%22name%22%3A%22test1%22%7D%2C%7B%22id%22%3A2%2C%22name%22%3A%22test2%22%7D%5D"
    
    接收端拿到参数后,先做URL解码,再反序列化为对象数组即可。注意系统路由默认不会自动做这层转换,需要在自身路由处理逻辑中添加对应的解析代码。
  • 下标平铺参数(适合简单结构,路由库自动解析支持好)
    如果对象结构简单、嵌套层级浅,可以按数组下标将对象属性平铺为独立参数,示例命令:
    xcrun simctl openurl booted "some-scheme://<pageName>?list[0].id=1&list[0].name=test1&list[1].id=2&list[1].name=test2"
    
    多数成熟的客户端路由框架(如iOS端JLRoutes、Android端ARouter)都支持自动将该格式的参数解析为对象数组,缺点是参数冗余度高,复杂嵌套结构不适用。

注意:所有非URL安全字符(空格、引号、方括号、大括号、中文等)直接拼入URL前都建议做手动编码,不同系统版本的自动编码逻辑存在差异,手动编码可以避免参数截断、解析失败等兼容性问题。

内容的提问来源于stack exchange,提问作者christo-pher18

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:12:18