Elixir Jason用元组编码结构

时间:2019-05-16 09:05:28

标签: elixir

我有一个已经有@derive Jason.Encoder的结构,但是该结构中的某些字段是元组,因此,由于无法对该结构进行编码,如何解决这个问题:/

更新

我在实现协议时使用了下面提到的方法。关于此方法,需要注意的重要一件事是它将更改整个项目的编码,请务必小心!

2 个答案:

答案 0 :(得分:2)

请查看有关如何实现encode/2函数的文档:https://hexdocs.pm/jason/Jason.Encoder.html

作为实现的一部分,您需要决定如何对元组进行编码,因为元组在JSON中没有类似物。数组可能是最简单的选择,因此您可以进行mytuple |> Tuple.to_list

答案 1 :(得分:1)

如果您确实需要将元组编码为列表类型,则可以这样做:

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

您应该能够使用类似的模式,根据需要将其转换为另一个原始结构。