Rails 5中映射MailChimp API返回的REST响应遇阻求助
解决MailChimp API数据转换问题
看起来你在处理MailChimp返回的成员数据时遇到了语法和逻辑问题,我来帮你梳理一下:
首先,你的@list是一个包含members数组的哈希,所以不能直接对整个哈希做遍历操作。我们需要先提取members数组里的每个邮箱地址,再把它们拼接成逗号分隔的字符串。
问题分析
你原来的代码有两个关键错误:
- 错误地对整个
@list哈希执行遍历,而应该遍历@list[:members]数组 render json:不支持你这种传块的转换方式,Rails的render json:需要直接传入要序列化的对象
正确的实现方式
根据你的需求,这里分两种场景给出解决方案:
场景1:返回纯文本格式的逗号分隔邮箱串
如果你想直接返回a@gmail.com, b@gmail.com这样的纯文本,可以这样写:
respond_to do |format| # 提取所有邮箱并拼接成逗号分隔的字符串 email_string = @list[:members].map { |member| member[:email_address] }.join(', ') format.text { render plain: email_string } format.html end
场景2:返回JSON格式(可选邮箱数组或拼接后的字符串)
如果还是需要返回JSON,你可以选择返回邮箱数组,或者把拼接后的字符串放在JSON字段里:
respond_to do |format| # 方案A:返回邮箱数组的JSON emails_array = @list[:members].map { |member| member[:email_address] } format.json { render json: emails_array } # 方案B:返回包含拼接字符串的JSON对象 # email_string = @list[:members].map { |member| member[:email_address] }.join(', ') # format.json { render json: { email_list: email_string } } format.html end
这样就能得到你想要的邮箱格式啦!
内容的提问来源于stack exchange,提问作者Dark Knight
相关产品推荐
相关产品推荐

