Я предполагаю, что то, что вы показываете как «ответ API покоя». Если это так, вам нужно очистить ее, чтобы она была действительной строкой JSON, преобразовать ее в хеш и затем извлечь нужный массив.
str =<<_
{ "functionality":[], "subfunctionality": [{"id":1, "title":"a1", "description":"sample},
{"id":2, "title":"a2", "description":"sample},
{"id":3, "title":"a3", "description":"sample}
_
require 'json'
a = JSON.parse(str.gsub("\"sample", "\"sample\"") << ']}')["subfunctionality"]
#=> [{"id"=>1, "title"=>"a1", "description"=>"sample"},
# {"id"=>2, "title"=>"a2", "description"=>"sample"},
# {"id"=>3, "title"=>"a3", "description"=>"sample"}]
Шаги следующие.
s = str.gsub("\"sample", "\"sample\"") << ']}'
#=> "{ \"functionality\":[], \"subfunctionality\": [{\"id\":1, \"title\":\"a1\",
# \"description\":\"sample\"},\n{\"id\":2, \"title\":\"a2\",
# \"description\":\"sample\"}, \n{\"id\":3, \"title\":\"a3\",
# \"description\":\"sample\"}\n]}"
h = JSON.parse(s)
#=> {"functionality"=>[],
# "subfunctionality"=>[{"id"=>1, "title"=>"a1", "description"=>"sample"},
# {"id"=>2, "title"=>"a2", "description"=>"sample"},
# {"id"=>3, "title"=>"a3", "description"=>"sample"}]}
h["subfunctionality"]
#=> (return value shown above)
Обратите внимание, что я разбил строку s
в разных местах, чтобы ее было легче читать.