Exclude certain json fields from rendering

Greetings all,

I have a json object (text) to render, formatted as:

{
“a”: “b”,
“c”:
[ { “id”: “abracadabra”,
“data”: “good” }
{ “id”: “abracxxabra”,
“data”: “goodsss” } ]
}

How could exclude the id fields from rendering, I tried different
combinations:

render json: obj, except: [ c: [ “id” ] ]
render json: obj, include: [ c: [ except: “id” ] ]

none of them works, any ideas? Thanks in advance.

Cheers,
Difei

Your example has an error

{ “id”: “abracadabra”,
“data”: “good” },(comma is missing)
{ “id”: “abracxxabra”,
“data”: “goodsss” }

Solution

render json: JSON.parse(obj).each{|k,v| v.each{|arr| arr.reject!{|x| x

“id” } } if v.class.to_s == “Array”}.to_json

On 26 November 2014 at 08:03, Zhao D. [email protected] wrote:

“data”: “goodsss” } ]
}

How could exclude the id fields from rendering, I tried different
combinations:

render json: obj, except: [ c: [ “id” ] ]
render json: obj, include: [ c: [ except: “id” ] ]

none of them works, any ideas? Thanks in advance.

If your json object is actually an ActiveRecord object (or maybe more
correctly ActiveModel) and you always want these objects to render in
a particular way, then you can override as_json to achieve this. Then
using render json to serialise it will use use overridden as_json,
where you can include whichever bits (including calculated values)
that you desire.

Colin

On Wednesday, November 26, 2014 6:25:01 PM UTC+8, Vivek S. wrote:

Your example has an error

Sorry, it’s a typo.

{ “id”: “abracadabra”,
“data”: “good” },(comma is missing)
{ “id”: “abracxxabra”,
“data”: “goodsss” }

Solution

render json: JSON.parse(obj).each{|k,v| v.each{|arr| arr.reject!{|x| x ==
“id” } } if v.class.to_s == “Array”}.to_json

Thanks but I found this a little bit ugly, so there is no way to use
:except ?

On Wednesday, November 26, 2014 6:57:37 PM UTC+8, Colin L. wrote:

[ { “id”: “abracadabra”,

none of them works, any ideas? Thanks in advance.

If your json object is actually an ActiveRecord object (or maybe more
correctly ActiveModel) and you always want these objects to render in
a particular way, then you can override as_json to achieve this. Then
using render json to serialise it will use use overridden as_json,
where you can include whichever bits (including calculated values)
that you desire.

I in fact I already override two methods of mongoid to do this, but I
still
have some json strings to render, which is not very handy if I cannot
use
the “render :except” method.

Probably a good case for an Active Model Serializer tailored to that
specific use case (JSON structure)

“data”: “good” }

Cheers,
Difei


You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected]
mailto:[email protected].
To post to this group, send email to [email protected]
mailto:[email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/2cd584c3-a4f0-4ced-9dfa-0b89f61f89d6%40googlegroups.com
https://groups.google.com/d/msgid/rubyonrails-talk/2cd584c3-a4f0-4ced-9dfa-0b89f61f89d6%40googlegroups.com?utm_medium=email&utm_source=footer.
For more options, visit https://groups.google.com/d/optout
https://groups.google.com/d/optout.


Jason Fleetwood-Boldt
[email protected]

All material © Jason Fleetwood-Boldt 2014. Public conversations may be
turned into blog posts (original poster information will be made
anonymous). Email [email protected] with questions/concerns about
this.