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

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

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 ?

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.

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)