使用Ruby,从JSON响应中的HTML字符串中获取值

3

我已经尽力搜索,但似乎没有找到我需要的答案。可能是因为我没用正确的措辞。我已尝试使用 .find 或甚至 .rindex 来向后计数,但都没有成功。我从 JSON 收到的值类似于这样:

"AdditionalData":"<Data><Entry Key=\"utm_campaign\" Value=\"j2c\" /> 
<Entry Key=\"utm_medium\" Value=\"cpc\" /><Entry Key=\"utm_source\" 
Value=\"j2c\" /><Entry Key=\"job_id\" Value=\"300_xxxx_10703\" /></Data>"

我需要获取“job_id”键的值,例如“300_xxxx_11233”。该值将根据JSON响应返回的每个对象而变化。如果有任何帮助,将不胜感激。请告诉我是否已经有相关内容,如果我错过了,请指出。

1个回答

3

如果每次请求的响应格式都保持不变,您甚至可以使用普通的正则表达式来获取您的数据,即使没有解析JSON。例如:

response = "<Data><Entry Key=\"utm_campaign\" Value=\"j2c\" /><Entry Key=\"utm_medium\" Value=\"cpc\" /><Entry Key=\"utm_source\" Value=\"j2c\" /><Entry Key=\"job_id\" Value=\"300_xxxx_10703\" /></Data>"
match = response.match(%r{job_id\\?"\s+Value=\\?"(.+)\\?"}i)
match[1] if match # => "300_xxxx_10703"

如果响应格式可能会改变(例如,如果Entry元素的属性顺序可能会改变),那么您需要解析JSON并使用一些HTML解析器,比如Nokigiri,来获取所需的属性。代码示例:
parsed_response = JSON.parse(response)
doc = Nokogiri::HTML(parsed_response['AdditionalData'])

job_id = nil
doc.css('Entry').each do |el|
  if el['Key'] == 'job_id'
    job_id = el['Value']
    break
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接