Эликсир Джейсон кодирует структуру с помощью кортежа - PullRequest
3 голосов
/ 16 мая 2019

У меня есть структура, в которой уже есть @derive Jason.Encoder, но некоторые поля в этой структуре являются кортежами, и по этой причине не могу кодировать структуру, как я могу это исправить: /

UPDATE

Я использовал подход, упомянутый ниже, для реализации протокола.Об этом подходе следует отметить одну важную вещь: он изменит кодировку для всего проекта, просто будьте осторожны с этим!

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Ознакомьтесь с документацией о том, как вам нужно реализовать функцию encode/2: https://hexdocs.pm/jason/Jason.Encoder.html

. В рамках вашей реализации вам нужно решить, как вы хотите кодировать кортеж, посколькунет аналога в JSON.Массив, вероятно, самый простой вариант, поэтому вы можете сделать mytuple |> Tuple.to_list

1 голос
/ 16 мая 2019

Если вам нужно кодировать кортежи как тип списка, это работает:

defmodule TupleEncoder do
  alias Jason.Encoder

  defimpl Encoder, for: Tuple do
    def encode(data, options) when is_tuple(data) do
      data
      |> Tuple.to_list()
      |> Encoder.List.encode(options)
    end
  end
end

Вы должны иметь возможность использовать аналогичный шаблон для преобразования его в другую примитивную структуру по мере необходимости.

...