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

Elixir中解析JSON返回的字符串型数字为整数的方法

嘿,针对你遇到的JSON API字段转整数的问题,我来帮你理清楚这两个方法的差异,以及怎么适配你的场景哈!

处理JSON字符串转Elixir整数的最佳实践

先搞懂两个核心方法的差异

1. String.to_integer/1

  • 这个方法只认纯数字字符串,如果输入不是合法的整数格式(比如"-"、"12.3"或者"abc"),会直接抛出ArgumentError异常。
  • 举个实际使用的例子:
    String.to_integer("12")  # 正常返回 12
    String.to_integer("-")   # 直接抛出 ArgumentError
    
  • 适合你能100%确保字段是合法数字字符串的场景,但显然你的场景里存在非数值内容,直接用这个很容易触发异常崩掉。

2. Integer.parse/1

  • 这个方法灵活度高很多,会尝试从字符串开头解析整数,成功的话返回{整数, 剩余未解析的字符串},完全解析不了就返回:error。
  • 实际示例:
    Integer.parse("12")    # 返回 {12, ""}(完全匹配数字)
    Integer.parse("-")     # 返回 :error(无法解析成整数)
    Integer.parse("12abc") # 返回 {12, "abc"}(只解析开头的数字部分)
    
  • 刚好完美适配你的场景——既能处理合法的数字字符串,又能精准识别出"-"这类非数值情况。

适配你的业务场景的实现示例

既然你需要转成整数后根据区间执行操作,我们可以结合模式匹配和条件判断来写逻辑:

def handle_api_field(map) do
  case map["target_field"] do
    # 先处理明确的非数值标记
    str when str in ["-", "", "N/A"] ->
      handle_non_numeric()
    
    # 处理普通字符串类型的字段
    str when is_binary(str) ->
      case Integer.parse(str) do
        {int, ""} ->
          # 整数完全匹配,根据区间执行对应操作
          cond do
            int < 10 -> do_low_value_operation(int)
            int >= 10 and int < 100 -> do_mid_value_operation(int)
            int >= 100 -> do_high_value_operation(int)
          end
        _ ->
          # 解析失败或者有剩余字符,统一归为非数值处理
          handle_non_numeric()
      end
    
    # 处理字段不存在的情况
    nil ->
      handle_missing_field()
  end
end

# 定义对应的业务操作函数
defp do_low_value_operation(int), do: IO.puts("处理小数值:#{int}")
defp do_mid_value_operation(int), do: IO.puts("处理中数值:#{int}")
defp do_high_value_operation(int), do: IO.puts("处理大数值:#{int}")
defp handle_non_numeric(), do: IO.puts("遇到非数值内容,执行对应逻辑")
defp handle_missing_field(), do: IO.puts("目标字段不存在,执行兜底逻辑")

额外优化小建议

  • 如果API返回的非数值标记还有其他形式,可以直接在开头的匹配列表里补充,让逻辑更直观;
  • 如果你在项目里频繁遇到这类转换需求,可以封装一个自定义的转换函数,或者用Ecto自定义类型(如果用了Ecto的话),让代码更复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:56:19