Используя Ruby, получите значение из строки HTML внутри ответа JSON - PullRequest
0 голосов
/ 23 октября 2018

Я искал то, что могу, и, похоже, я не нахожу нужного мне ответа.Конечно, я не могу правильно это сформулировать.Я пытался использовать .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 Ответ

0 голосов
/ 23 октября 2018

Если формат ответа остается неизменным при каждом запросе, вы можете использовать простое выражение регулярного выражения для извлечения данных, даже без анализа 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, например: Нокигири , для получения необходимого атрибута.Пример кода:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...