我有一个已经有@derive Jason.Encoder
的结构,但是该结构中的某些字段是元组,因此,由于无法对该结构进行编码,如何解决这个问题:/
更新
我在实现协议时使用了下面提到的方法。关于此方法,需要注意的重要一件事是它将更改整个项目的编码,请务必小心!
答案 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
您应该能够使用类似的模式,根据需要将其转换为另一个原始结构。