从elixir ecto协会创建json

我想从凤凰城的ecto协会生成 JSON.

这是我的协会:

defmodule Blog.Post do
  use Ecto.Model

  schema "posts" do
    field :title,:string
    field :body,:string
    has_many :comments,Blog.Comment
  end
end

和:

defmodule Blog.Comment do
  use Ecto.Model

  schema "comments" do
    field :content,:string
    belongs_to :post,Blog.Post
  end
end

当我生成没有关联的json时,结果如下:

[%Blog.Post{body: "this is the very first post ever!",id: 1,title: "first post"},%Blog.Post{body: "Hello nimrod!!!!",id: 12,title: "hi nimrod"},%Blog.Post{body: "editing the body!!!!",id: 6,title: "hello(edit)"}]

而json看起来像这样

{"posts": [
    {
        "title": "first post","id": 1,"body": "this is the very first post ever!"
    },{
        "title": "hi nimrod","id": 12,"body": "Hello nimrod!!!!"
    },{
        "title": "hello(edit)","id": 6,"body": "editing the body!!!!"
    }
]}

但结果就是结果

[%Blog.Post{body: "this is the very first post ever!",comments: {Ecto.Associations.HasMany.Proxy,#Ecto.Associations.HasMany<[name: :comments,target: Blog.Post,associated: Blog.Comment,references: :id,foreign_key: :post_id]>},title: "hello(edit)"}]

使用上面的输出我无法创建适当的json输出.我想让json看起来像这样

{"posts": [
     {
        "title": "the title","body": "the body","comments": [{"content": "a comment"},{"content": "another comment"}]
     }
     ...
]}

任何帮助,将不胜感激.

解决方法

哎呀,目前还没有简单的解决方案.我会尝试类似的东西:
defimpl Poison.Encoder,for: Tuple do
  def encode(proxy,options) do
    Poison.Encoder.List.to_json(proxy.all,options)
  end
end

我们基本上为元组实现编码器,接收上面的代理并编码所有项目.我们需要为此讨论更好的解决方案.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...