Ruby — преобразование массива в формате хэша в фактический хэш

#ruby

#ruby

Вопрос:

Я новичок в ruby и начал использовать его последние несколько дней, поэтому приношу свои извинения, если я спрашиваю что-то очень простое.

Я ищу способ преобразовать следующий массив в хэш.

 arr => 

{"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"}
  

где arr.length равно 1.

Я попытался обойти это, но не смог преобразовать его в хэш.

Мне это было нужно, потому что Testlink xmlrpc отвечает в формате, показанном выше.

Любая помощь по этому вопросу была бы очень полезной.

Спасибо.

Комментарии:

1. Ваш массив уже является хэшем, или в вашем коде чего-то не хватает

2. Я думаю, что чего-то не хватает. Я не вижу массива.

3. @Ray — Фактический ответ xmlrpc был «[{«id»=> «xxx», «name» =>»показать все», «parent_id»=> «гггг», «tsuite_name» =>»показать систему», «tc_external_id» => «zzz»}]»

4. Ах, хорошо, тогда просто возьмите элемент 0 массива, и у вас будет ваш хэш. 🙂

Ответ №1:

Добро пожаловать в Ruby!

Приведенная ниже конструкция является хэшем.

 {"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"}
  

Если бы это был массив, он был бы окружен фигурными скобками:

 [{"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"}]
  

Но я думаю, что вам дали следующее:

 { "arr" => {"id"=>"xxx", "name"=>"show all", "parent_id"=>"yyy", "tsuite_name"=>"show system", "tc_external_id"=>"zzz"} }
  

Вышеупомянутый объект представляет собой хэш внутри хэша. length Метод сообщил 1, потому что хэш содержал только один ключ, а именно arr .

Вы можете протестировать класс переменной с class помощью метода:

 $ irb
>> var = { "arr" => {"id"=>"xxx", "name"=>"show all" } }
=> { "arr" => {"id"=>"xxx", "name"=>"show all" } }
>> var.class
=> Hash
  

Если все, что вам нужно, это значение внутреннего хэша, тогда возьмите его следующим образом:

 >> keep = var["arr"]
=> {"id"=>"xxx", "name"=>"show all" }
  

Если я совершенно неправильно понял ваш вопрос, пожалуйста, уточните.

Комментарии:

1. Karrick — Спасибо за ответ. Это был только массив, вывод был заключен только в фигурные скобки, как показано в вашем ответе. Есть ли способ преобразовать это в хэш?

2. Другими словами, вы можете получить любой элемент из массива, используя его индекс внутри фигурных arr[0] скобок . Обычный ярлык в Ruby — использовать first метод для получения первого элемента из массива : arr.first .