我已尽我所能进行搜索,但似乎没有找到我需要的答案。当然,我可能措辞不当。我试过使用 .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/