Search code examples
ruby-on-rails-4jbuilder

Rails 4 building JSON with custom keys using JBuilder


I'm using JBuilder to build JSON response and now it look like:

 json.array!(@work_posts) do |work_post|
 json.extract! work_post, :post_title, :post_body, :salary, :urgently, :contact, :created_at, :updated_at
 json.contact do
   json.emails work_post.contact.emails
   json.phones work_post.contact.phones
   json.links work_post.contact.links
 end
end

And response look like:

[
  {
    "post_title": "Some work",
    "post_body": "work description",
    "salary": "5$/hour",
    "urgently": true,
    "contact": {
         "emails": "",
         "phones": "",
         "links": ""
              },
    "created_at": "2015-10-11T23:46:17.979+05:00",
    "updated_at": "2015-10-11T23:46:17.979+05:00"
    }
]

I want add cutom keys to make response look like:

"result" : "success",   
"data" : [
  {
    "post_title": "Some work",
    "post_body": "work description",
    "salary": "5$/hour",
    "urgently": true,
    "contact": {
         "emails": "",
         "phones": "",
         "links": ""
              },
    "created_at": "2015-10-11T23:46:17.979+05:00",
    "updated_at": "2015-10-11T23:46:17.979+05:00"
    }
]

What should I do to achieve this?


Solution

  • I haven't seen such question anywhere and I finally achieved what I wanted. Hope that it will be useful for someone. So the answer is very obvious: instead of using json.array! I should use what I exactly need => json.data and then I just need to put json.result "success" above. The result will be:

    "result" : "success",   
    "data" : [
     {
        "post_title": "Some work",
        "post_body": "work description",
        "salary": "5$/hour",
        "urgently": true,
        "contact": {
             "emails": "",
             "phones": "",
             "links": ""
              },
        "created_at": "2015-10-11T23:46:17.979+05:00",
        "updated_at": "2015-10-11T23:46:17.979+05:00"
      }
    ]