如何在Jbuilder中合并JSON对象

时间:2018-06-19 11:27:58

标签: ruby-on-rails json jbuilder

我正在使用Backbone / Marionette前端创建Rails应用程序。 我想采用下面的JSON对象并对其进行转换。

这就是现在的样子

[{
        "total_entries": 4
    },
    {
        "entries": [{
                "user": {
                    "id": 1,
                    "fullname": "Paul Paulsen"
                },
                "reports": [{
                        "id": 1,
                        "name": "Anna Pearson",
                        "relation": "wife",
                        "phone": "2232",
                        "email": "adsas@sss.se"
                    }
                ]
            },
            {
                "user": {
                    "id": 2,
                    "fullname": "Anna Palmgren"
                },
                "reports": [{
                    "id": 3,
                    "name": "Mika",
                    "relation": "Andersen",
                    "phone": "12312321",
                    "email": "aas@sss.se"
                }]
            }
        ]
    }
]

我想让它看起来像这样

[{
        "total_entries": 4
    },
    {
        "entries": [{
                "id": 1,
                "fullname": "Paul Paulsen"
            }, {
                "id": 1,
                "name": "Anna Pearson",
                "relation": "wife",
                "phone": "2232",
                "email": "adsas@sss.se"
            }, {
                "id": 1,
                "fullname": "Anna Palmgren"
            }, {
                "id": 3,
                "name": "Mika",
                "relation": "Andersen",
                "phone": "12312321",
                "email": "aas@sss.se"
            }

        ]
    }
]

这是我使用的Rabl文件/代码

json.array! [0,1] do |index|
  if index == 0
    json.total_entries @total
  else
    json.entries @reports.group_by(&:user) do |user, reports|
      json.user user, :id, :fullname
      json.reports reports do |report|
        json.extract! report, :id, :name, :relation, :phone, :email
      end
    end
  end
end

1 个答案:

答案 0 :(得分:0)

尝试一下红宝石代码段。

    x= [{
            "total_entries": 4
        },
        {
            "entries": [{
                    "user": {
                        "id": 1,
                        "fullname": "Paul Paulsen"
                    },
                    "reports": [{
                            "id": 1,
                            "name": "Anna Pearson",
                            "relation": "wife",
                            "phone": "2232",
                            "email": "adsas@sss.se"
                        }
                    ]
                },
                {
                    "user": {
                        "id": 2,
                        "fullname": "Anna Palmgren"
                    },
                    "reports": [{
                        "id": 3,
                        "name": "Mika",
                        "relation": "Andersen",
                        "phone": "12312321",
                        "email": "aas@sss.se"
                    }]
                }
            ]
        }
    ]

   x[1][:entries] = x[1][:entries].map{|p| [p[:user], p[:reports]]}.flatten