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

标签 html ruby-on-rails json ruby string

我已尽我所能进行搜索,但似乎没有找到我需要的答案。当然,我可能措辞不当。我试过使用 .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 响应返回的每个对象而变化。任何帮助将不胜感激,如果这已经存在并且我只是错过了,请告诉我。

最佳答案

如果每个请求的响应格式保持不变,您可以使用普通的正则表达式来获取数据,即使不解析 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

关于html - 使用 Ruby,从 JSON 响应中的 HTML 字符串中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956925/

相关文章:

java - JSONException : at jsonData of type java. lang.String 无法转换为 JSONArray

json - 您如何在Go中阅读嵌套的Json?

javascript - 从 AngularJS 更新 html

jquery - 分别为每个 li 添加一个 child

ruby-on-rails - Rails/Ruby ... 50mb 字符串性能

ruby-on-rails - 更新计划作业的参数

php - 将包含json的excel单元格转换成csv

javascript - 如何制作具有动态内容的可滚动 div

html - css: text-align: center 只适用于多行文本,而不是单行?

ruby-on-rails - 无法在本地运行 Rails 服务器