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

Ruby SMS广播应用本地化:JSON转清洗哈希的实现求助

解决Ruby SMS Broadcast应用中提取JSON数据生成目标哈希的问题

看起来你在提取JSON数据生成联系人哈希时遇到了几个小问题,我来帮你梳理并修正:

先分析现有代码的错误点:

  • 你错误地使用了entry['name']['number']来取值,但你的JSON结构里,每个条目是同级的name和number键,并不是嵌套的,所以应该分别获取entry['name']和entry['number']。
  • sanitize(number)里的number变量没有定义,你需要从当前遍历的entry中取出号码值,而且JSON里的号码是数字类型,转成字符串后再处理会更稳妥。
  • 你的目标哈希键需要带国家码1,要确保清洗后的号码包含这个前缀(如果你的sanitize方法还没处理这一步的话)。

修正后的代码

首先是核心的contacts_from_spreadsheet方法:

def contacts_from_spreadsheet
  contacts = {}
  data_from_spreadsheet.each do |entry|
    name = entry['name']
    # 将数字类型的号码转为字符串,避免处理时出现类型问题
    raw_number = entry['number'].to_s
    # 调用你的号码清洗方法
    cleaned_number = sanitize(raw_number)
    
    # 如果你的sanitize方法没有添加国家码1,在这里补充(根据需求调整)
    cleaned_number = "1#{cleaned_number}" unless cleaned_number.start_with?('1')
    
    # 填充到目标哈希中
    contacts[cleaned_number] = name
  end
  contacts
end

另外,确保你的sanitize方法能正确移除号码中的非数字字符(比如括号、横杠等),示例实现如下:

def sanitize(number)
  # 移除所有非数字字符,只保留纯数字
  number.gsub(/\D/, '')
end

测试验证

用你提供的JSON数据测试的话,最终会生成你期望的哈希:

{ '19045555555' => 'Michael', '17865555555' => 'Natalie' }

(注:你示例中的第二个目标号码多打了一位,原JSON是7865555555,所以正确结果应该是17865555555)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:42