长生不老药Jason用元组编码结构



我有一个已经具有@derive Jason.Encoder的结构,但是该结构中的某些字段是元组,因此无法编码结构,我该如何修复:/

update

我使用了以下方法实现协议的方法。关于这种方法要注意的一件重要的事情是,它将改变整个项目的编码,请小心!

如果您确实需要将元组编码为列表类型,则有效:

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

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

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

作为实施的一部分,您需要确定要如何编码元组,因为它在JSON中没有模拟。数组可能是最简单的选择,因此您可以执行mytuple |> Tuple.to_list

我发现,如果元组包含具有原始defimpl扩展的元素(例如,用于mapset,range和stream的示例ONE(, @bxdoan的解决方案无效。我将其更改为:

defimpl Jason.Encoder, for: Tuple do
  def encode(data, opts) when is_tuple(data) do
    Jason.Encode.list(Tuple.to_list(data), opts)
  end
end

效果更好。

最新更新