Tôi đang sử dụng Poison để mã hóa bản đồ thành JSON sẽ gửi nó tới API Slack. Đây là những gì Poison mang lại cho tôi:Mã hóa bản đồ tới JSON bằng cách sử dụng Poison để sử dụng với Slack
"{\"text\":\"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296\"}"
Khi tôi đặt nó vào JSON lint nó nói đó là JSON hợp lệ, nhưng Slack trả lời "tải trọng không hợp lệ".
Nếu tôi thay đổi JSON để trông như thế này
{"text":"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296"}
Sau đó nó hoạt động. Có ai biết tôi đang đi sai với cái này không? Tôi có cần phải thực hiện xử lý thêm trên JSON được mã hóa hay không hoặc có một số tiêu đề tôi cần phải đặt không?
Đây là bộ điều khiển của tôi
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
Dưới đây là một phần của thư viện để gửi các thông điệp
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
Và tôi HTTPoison chế biến
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
Phần tạo ra JSON là trong khối cuối cùng.
Bạn có thể đăng nguồn của chức năng bộ điều khiển có liên quan không? Có thể bạn đang gọi 'json (conn, Poison.encode! (Dữ liệu))' thay vì 'json (conn, data)'. – Dogbert
Đã thêm một số mã để cung cấp ý tưởng tốt hơn về những gì tôi đang làm. – humdinger
"Đây là những gì Poison mang lại cho tôi: ..." ở đâu trong mã bạn đã nhận được giá trị này từ? – Dogbert