Ruby создать массив из ответа API - PullRequest
0 голосов
/ 11 ноября 2018

Как создать массив или сохранить ответ API api на массив

ответ API остальных

{"functionality":[],"subfunctionality":   [{"id":1,"title":"a1","description":"sample}, 
{"id":2,"title":"a2","description":"sample}, 
{"id":3,"title":"a3","description":"sample}

я хотел, чтобы результаты сохранялись в массиве, как показано ниже

a[0]={"id":1,"title":"a1","description":"sample}
a[1]={"id":2,"title":"a2","description":"sample}
a[2]={"id":3,"title":"a3","description":"sample}]}

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Я предполагаю, что то, что вы показываете как «ответ 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 в разных местах, чтобы ее было легче читать.

0 голосов
/ 11 ноября 2018
arrayName= $responsebody.split(/{(.*?)}/)

работал на меня.

...