Sto utilizzando Poison per codificare una mappa su JSON che la invierà all'API Slack. Questo è ciò che mi dà Veleno:Codifica della mappa su JSON utilizzando Poison per l'uso con Slack
"{\"text\":\"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296\"}"
Quando ho messo che in JSON pelucchi si dice che è valida JSON, ma Slack risponde "payload non valido".
Se cambio la JSON per assomigliare a questo
{"text":"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296"}
allora funziona. Qualcuno sa dove sto andando male con questo? Devo eseguire un'ulteriore elaborazione sul JSON codificato o c'è qualche intestazione che devo impostare?
Ecco il mio controller
def create(conn, opts) do
message = Message.create_struct(opts)
response = Slack.Messages.send(message)
case response do
{:ok, data} ->
render conn, json: Poison.encode!(data)
{:error, reason} ->
render conn, json: reason
end
end
Ecco parte della libreria per l'invio dei messaggi
defmodule Slack.Messages do
def format_simple_message(map) do
text = map.description <> " " <> map.commits
message = %{text: text}
end
def post_to_slack(map) do
Slack.post(:empty, map)
end
def send(map) do
map
|> format_simple_message
|> post_to_slack
end
end
E il mio HTTPoison elaborazione
defmodule Slack do
use HTTPoison.Base
@endpoint "http://url.com"
def process_url() do
@endpoint
end
def process_response_body(body) do
body
|> Poison.decode! # Turns JSON into map
end
def process_request_body(body) do
body
|> Poison.encode! # Turns map into JSON
end
end
La parte che crea il JSON è nell'ultimo blocco.
È possibile pubblicare la sorgente della funzione di controllo pertinente? Probabilmente stai chiamando 'json (conn, Poison.encode! (Data))' invece di 'json (conn, data)'. – Dogbert
Aggiunta del codice per dare un'idea migliore di ciò che sto facendo. – humdinger
"Questo è ciò che Poison mi dà: ..." da dove nel codice hai preso questo valore? – Dogbert