如何使用HTTParty将API返回的非JSON非哈希竖线分隔数据转为哈希或数组
格式说明
你拿到的返回结果是管道分隔值(PSV,Pipe-Separated Values)格式,属于纯文本类分隔格式,和CSV属于同类,只是分隔符用竖线|,完全不是XML格式。
实现代码
你可以直接按行拆分解析,也可以用Ruby自带的CSV库做更稳妥的解析,两种方案如下:
方案1:手动拆分(简单场景用)
# 注意请求地址要补全http/https协议头,否则会报错 response = HTTParty.get("http://www.apiurl.com") # 按行拆分响应内容,过滤空行 lines = response.body.split("\n").reject(&:empty?) # 提取表头,拆分后清除字段前后的多余空格 headers = lines.first.split("|").map(&:strip) # 逐行转换为哈希,组成最终的数组 @list = lines[1..-1].map do |line| values = line.split("|").map(&:strip) headers.zip(values).to_h end
方案2:用CSV库解析(复杂场景更稳妥,可处理字段内包含分隔符、引号的情况)
require 'csv' response = HTTParty.get("http://www.apiurl.com") # 直接指定分隔符为|,自动识别表头 @list = CSV.parse( response.body, headers: true, col_sep: '|', skip_blanks: true ).map(&:to_h)
使用示例
解析完成后你就可以按需求遍历取值了:
@list.each do |item| # 输出所有Number字段值 puts item['Number'] # 也可以直接取其他字段,比如 item['Station name']、item['Latitude'] end
内容的提问来源于stack exchange,提问作者yellowskull
相关产品推荐
相关产品推荐

