2013-07-10 2 views
-1

Я собираю HTTP-ответ и возвращается в текстовой/json-форме. Оригинальный формат выглядит следующим образом:Анализ текста/json данных в Ruby

{"param" => "value", "interesting_param" => [{"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5}, 
{"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}]} 

Когда я делаю JSON.parse (response.body) [ "interesting_param"], я могу получить этот результат:

{"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5}, 
{"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5} 

Как я могу захватить только из приведенного выше полного результата.

`parama1-vala1`, `parama2-vala2` and `parama5-vala5` 
`paramb1-valb1`, `paramb2-valb2` and `paramb5-valb5` 

Update Я попытался дальше по этому & сейчас я имею в виду использования цикла. Так я пытаюсь сделать это:

  1. Найти количество записей, например, если:

test = {"parama1"=>vala1,"parama2"=>vala2,"parama3"=>vala3,"parama4"=>vala4,"parama5"=>vala5}, {"paramb1"=>valb1,"paramb2"=>valb2,"paramb3"=>valb3,"paramb4"=>valb4,"paramb5"=>valb5}

Тогда test.count будет .

Теперь, если каким-то образом я могу использовать цикл для перебора элементов в test, тогда я мог бы захватить определенные элементы.

Спасибо.

+1

Можете ли вы разместить точное значение? Ваш синтаксис недействителен в примере кода. Также нужен точный формат вывода. – Dogbert

+0

@Dogbert Как здесь синтаксис недействителен? Я только дезинфицировал реальные данные. Это все. – Sunshine

+0

Вы, вероятно, должны иметь '[' before и ']' после 5 строк данных ..? – Dogbert

ответ

1

Похоже, вы хотите сопоставить каждый хеш в списке строк, сделанных путем присоединения строковой версии ключа со строковой версией значения, соединенной с символом '-'.

JSON.parse(response.body)["interesting_param"] 

Приведенный выше код должен предоставить рубиновый список хешей.

interesting_bits = JSON.parse(response.body)["interesting_param"] 
result = interesting_bits.map{|bit| bit.map{|k,v| "#{k}-#{v}"}} 

Что-то вроде этого должно сделать трюк.

puts result.inspect 
#prints 
# [ ["parama1-vala1","parama2-vala2","parama3-vala3","parama4-vala4","parama5-vala5"] , ["paramb1-valb1","paramb2-valb2","paramb3-valb3","paramb4-valb4","paramb5-valb5"] ] 

Я не понимаю, какие критерии вы используете для последующей фильтрации это вниз только 1,2 и 5 ... но это легко сделать тоже. Я сделал бы это для хэшей, прежде чем преобразовывать их в строковые списки.

+0

Спасибо Найджелу. Я воспользовался первым part - JSON.parse (response.body) ["myvar"]. По какой-то причине теперь я получаю сообщение об ошибке: JSON :: ParserError: 757: неожиданный токен в ''. Любая идея почему он перестал работать ..? – Sunshine

+0

Поскольку ваш JSON больше не отформатирован.Что-то изменилось в коде, создающем JSON. Ваш вопрос действительно неясен. Каков контекст для этого кода? Похоже, вам нужно освежить свой основной Ruby, http://www.ruby-doc.org/core-2.0.0/Hash.html и http://www.ruby-doc.org/core-2.0. .0/Array.html должен помочь. –

Смежные вопросы