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

Benthos中Bloblang type()函数失效问题求助

问题分析与解决办法

问题原因

CSV输入被Benthos解析后,所有字段值默认都是字符串类型——哪怕内容是数字。所以你用type()检测字段值类型时,得到的都是"string"而非"number",直接判断i.key.type == "number"自然不会匹配到任何字段,最终导致累加逻辑失效。

另外你的Bloblang表达式存在两处错误:

  • 写法错误:i.key.type无法获取字段值类型,应该用i.value.type()
  • 逻辑遗漏:未处理CSV中数字以字符串存储的情况,直接判断类型无法识别数字内容

解决步骤

1. 修正Bloblang累加逻辑

我们需要先尝试将字符串字段转换为数字,仅对转换成功的字段进行累加。修改后的Bloblang代码如下:

root.total_population = this.key_values()
  # 过滤掉无法转为数字的字段(如州名字段)
  .filter(i -> i.value.parse_float().is_ok())
  # 累加转换后的有效数字
  .fold(0, (tally, item) -> tally + item.value.parse_float().unwrap())

2. 完整修正后的Benthos配置

input:
  csv:
    paths:
      - data/population_data.csv
      - data/projects_data.csv
    parse_header_row: true
    lazy_quotes: true

pipeline:
  processors:
    - switch:
        - check: '@path == "data/population_data.csv"'
          processors: 
          - bloblang: |
              root.total_population = this.key_values()
                .filter(i -> i.value.parse_float().is_ok())
                .fold(0, (tally, item) -> tally + item.value.parse_float().unwrap())
        - check: '@path == "data/projects_data.csv"'
          processors:
          - bloblang: |
              root = this
              root.regioname = deleted()

关键逻辑说明

  • parse_float():尝试将字符串转换为浮点数,返回包含成功/失败状态的结果类型
  • is_ok():判断转换是否成功,过滤掉非数字内容的字段
  • unwrap():取出转换成功后的数字值,用于累加计算

可选优化

如果你的人口数据都是整数,可替换为parse_int()确保累加结果为整数类型:

root.total_population = this.key_values()
  .filter(i -> i.value.parse_int().is_ok())
  .fold(0, (tally, item) -> tally + item.value.parse_int().unwrap())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:52:12