Elixir - 从 2 collections 创建 JSON object

Elixir - Creating JSON object from 2 collections

我在 Elixir 中使用 Postgrex,当它 returns 查询结果时,它 returns 它们采用以下结构格式:

%{columns: ["id", "email", "name"], command: :select, num_rows: 2, rows: [{1, "me@me.com", "Bobbly Long"}, {6, "email@tts.me", "Woll Smoth"}]}

需要注意的是我直接使用 Postgrex 没有 Ecto。

列 (table headers) 作为 collection 返回,但结果(行)作为元组列表返回。 (这看起来很奇怪,因为它们可能会变得非常大)。

我正在尝试找到以编程方式为每个结果创建 JSON object 的最佳方法,其中 JSON 键是列标题,JSON value 从元组中取相应的值。

我试过从两者创建地图,合并然后序列化为 JSON objects 但似乎应该有一种 easier/better 方法来做到这一点。

有没有人处理过这个问题?从单独的 collection 和元组创建 JSON object 的最佳方法是什么?

像这样的东西应该可以工作:

result = Postgrex.query!(...)

Enum.map(result.rows, fn row ->
  Enum.zip(result.columns, Tuple.to_list(row))
  |> Enum.into(%{})
  |> JSON.encode
end)

这将生成 json 个对象的列表,其中结果集中的每一行都是一个 json 个对象。