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

使用endly做E2E测试时,JSON存int键到Aerospike Map报错求助

解决Aerospike Map整数键与JSON字符串键的冲突问题

你碰到的这个invalid character '1' looking for beginning of object key string报错,核心原因很明确:JSON语法强制要求对象的键必须是字符串,但Aerospike的Map允许整数作为键,而endly的dsunit组件默认用标准JSON解析测试数据,直接写{1: "value"}这种格式自然会触发语法错误。

下面给你几个针对性的解决方案,按易用性排序:

方法1:用endly内置的类型标记前缀

endly的dsunit支持通过特定前缀来声明键的类型,你只需要把JSON里的字符串键改成__int:数字的格式,dsunit在写入Aerospike时会自动把前缀去掉,将键转换成整数类型。比如:

{
  "__int:1": "user_1_data",
  "__int:2": "user_2_data"
}

这种方式不需要修改工作流配置,直接调整测试数据即可,是最快捷的解决办法。

方法2:在data.yaml中配置字段类型映射

如果你的测试数据里有大量需要整数键的Map,可以在dsunit的注册配置里添加类型映射规则,一劳永逸地指定某个bin的Map键类型。比如在你的@data.yaml里修改register步骤:

defaults:
  datastore: db1
pipeline:
  register:
    action: dsunit:register
    config:
      driverName: aerospike
      # 保留你原有的其他配置
      mappings:
        - entity: 你的实体名称
          fields:
            你的Map类型bin名称:
              type: map
              keyType: int

配置后,dsunit处理这个bin的数据时,会自动把JSON中的字符串键转换成整数键,不用再手动加前缀。

方法3:用脚本预处理数据

如果上面两种方法都不适合你的场景,还可以在数据写入前用endly的脚本能力做一次转换。比如在工作流里加一个预处理步骤:

pipeline:
  # 先把字符串键的JSON转成整数键的Map
  preprocess_map_data:
    action: script:js
    script: |
      // 这里替换成你的原始测试数据
      let rawJsonData = { "1": "v1", "2": "v2", "3": "v3" };
      let intKeyMap = new Map();
      Object.keys(rawJsonData).forEach(key => {
        intKeyMap.set(parseInt(key), rawJsonData[key]);
      });
      return { processedMap: intKeyMap };
  # 再把处理好的Map写入Aerospike
  write_to_aerospike:
    action: dsunit:import
    source: $preprocess_map_data.processedMap
    target: db1/你的实体名称/你的Mapbin名称

通过JavaScript脚本完成键类型的转换,再传递给dsunit写入数据库。

验证数据是否正确写入

写完数据后,你可以用dsunit的query动作验证结果,此时预期值里直接写整数键即可:

verify_map_data:
  action: dsunit:query
  datastore: db1
  entity: 你的实体名称
  where: id = '你的记录ID'
  expect:
    你的Mapbin名称:
      1: "user_1_data"
      2: "user_2_data"

内容的提问来源于stack exchange,提问作者terry.zhao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:57:16