Как преобразовать ответ тела POST, чтобы получить элементы?

Я делаю веб-запрос, используя HTTPoison в Эликсире:

HTTPpoison.post "http://localhost:3000/mymodels"," {\"param1\": \"#{value1}\" ,  \"param2\":\"#{value2}\"} ", [{"Content-Type", "application/json"}] 

Вот ответ, который я получаю:

{:ok,
 %HTTPoison.Response{body: "{\"id\":46,\"result\":18,\"param1\":\"liqueur\",\"param2\":\"quif\"}",
  headers: [{"X-Frame-Options", "SAMEORIGIN"},
   {"X-XSS-Protection", "1; mode=block"}, {"X-Content-Type-Options", "nosniff"},
   {"Location", "http://localhost:3000/mymodels/46"},
   {"Content-Type", "application/json; charset=utf-8"},
   {"ETag", "W/\"05b8c75e0a5288c835651f48d4b8a80a\""},
   {"Cache-Control", "max-age=0, private, must-revalidate"},
   {"X-Request-Id", "1e8ae2d3-073a-4779-916a-edffc38f8b5a"},
   {"X-Runtime", "0.530440"}, {"Transfer-Encoding", "chunked"}],
  status_code: 201}}

Я новичок в Эликсире, и моя проблема в том, что я хочу получить элемент results из элемента response.body.

iex(3)> response.body           
"{\"id\":46,\"results\":18,\"param1\":\"liqueur\",\"param2\":\"quif\"}"

Я не знаю, как преобразовать эту строку в массив/хэш или stuple в Эликсире. У меня есть в Enum, но он не работает


person FredyK    schedule 13.03.2017    source источник


Ответы (1)


response.body — это строка в кодировке JSON. Вам нужно использовать синтаксический анализатор JSON, чтобы сначала проанализировать его в соответствующей структуре данных Elixir. С Poison вы должны использовать Poison.decode!/1:

iex(1)> body = "{\"id\":46,\"results\":18,\"param1\":\"liqueur\",\"param2\":\"quif\"}"
"{\"id\":46,\"results\":18,\"param1\":\"liqueur\",\"param2\":\"quif\"}"
iex(2)> json = Poison.decode!(body)
%{"id" => 46, "param1" => "liqueur", "param2" => "quif", "results" => 18}
iex(3)> json["results"]
18
person Dogbert    schedule 13.03.2017
comment
Большое спасибо, Догберт, после установки зависимости от Poison я вернулся. Я думаю, что Эликсир великолепен. - person FredyK; 13.03.2017