Elixir Jason 使用元组编码结构

Tan*_*ano 11 elixir

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

更新

我已经使用下面提到的方法来实现协议。关于这种方法需要注意的一件重要事情是它会改变整个项目的编码,请小心!

bxd*_*oan 15

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

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
Run Code Online (Sandbox Code Playgroud)

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


mro*_*ach 8

查看有关如何实现该encode/2功能的文档:https : //hexdocs.pm/jason/Jason.Encoder.html

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